3

I am creating the custom calendar using JTCalendar. I have created it using JTcalendar in Objective-C. Now I want to use same in Swift. I have tried using Briding-Header but still it shows JTCalendar file does not exist error.

Please suggest.

Ashok Londhe
  • 1,491
  • 11
  • 29

2 Answers2

8
  • In podfile write pod 'JTCalendar', '~> 2.0' and install the pod.
  • Create one view which have custom class JTCalendarMenuView & give refrencing outlet as calendarMenuView
  • Create another view which have custom class JTHorizontalCalendarView & give referencing outlet as calendarContentView
  • Import JTCalendar and implement JTCalendar delegate

    import JTCalendar
    class ViewController: UIViewController , JTCalendarDelegate

  • Create outlet for CalendaManager and declare some variable which we used later.

    @IBOutlet weak var calendarMenuView: JTCalendarMenuView!
    @IBOutlet weak var calendarContentView: JTHorizontalCalendarView!
    @IBOutlet var calendarManager : JTCalendarManager!
    
    var todayDate = NSDate()
    var minDate = NSDate()
    var maxDate = NSDate()
    var dateSelected = NSDate()
    
  • In ViewDidLoad initialize CalendarManager , give delegete and set menuview , contentview and setDate.

    override func viewDidLoad() {
    
    super.viewDidLoad()
    
    calendarManager = JTCalendarManager.init()
    calendarManager.delegate = self
    
    self.createMinAndMaxDate()
    
    calendarManager.menuView = calendarMenuView
    calendarManager.contentView = calendarContentView
    let mydate = Date()
    calendarManager.setDate(mydate)
    }
    
  • Create Function for minimum and maximum date which you want to display in calendar.

     func createMinAndMaxDate(){
    
        todayDate = NSDate()
    
        minDate = calendarManager.dateHelper.add(to: todayDate as Date!, months: -6) as NSDate
    
        maxDate = calendarManager.dateHelper.add(to: todayDate as Date!, months: 6) as NSDate
    
    }
    
  • In canDisplayPageWithDate method set minimim and maximum date

    public func calendar(_ calendar: JTCalendarManager!, canDisplayPageWith date: Date!) -> Bool {
        return calendarManager.dateHelper.date(date, isEqualOrAfter: minDate as Date!, andEqualOrBefore: maxDate as Date!)
    
    }
    
  • Use prepareDayView method

    public func calendar(_ calendar: JTCalendarManager!, prepareDayView dayView: UIView!){
    
        // Today
        let mydayview=dayView as! JTCalendarDayView
        if(calendarManager.dateHelper.date(NSDate() as Date!, isTheSameDayThan: mydayview.date))
        {
            mydayview.circleView.isHidden = false;
            mydayview.dotView.backgroundColor = UIColor.blue
            mydayview.textLabel.textColor = UIColor.white
        }
        // Selected date
        else if(String(describing: dateSelected) != "" && calendarManager.dateHelper.date(dateSelected as Date!, isTheSameDayThan: mydayview.date))
        {
            mydayview.circleView.isHidden = false;
            mydayview.circleView.backgroundColor = UIColor.red
            mydayview.dotView.backgroundColor = UIColor.white
            mydayview.textLabel.textColor = UIColor.white
        }
        // Other month
        else if(calendarManager.dateHelper.date(calendarContentView.date, isTheSameMonthThan: mydayview.date))
        {
            mydayview.circleView.isHidden = true;
            mydayview.dotView.backgroundColor = UIColor.red
            mydayview.textLabel.textColor = UIColor.black
        }
        // Another day of the current month
        else
        {
            mydayview.circleView.isHidden = true;
            mydayview.dotView.backgroundColor = UIColor.red
            mydayview.textLabel.textColor = UIColor.lightGray
        }
    
    }
    
  • Use didTouchDayView method for animating when user select and perticular date and move to next and previous month if that date is selected

    public func calendar(_ calendar: JTCalendarManager!, didTouchDayView dayView: UIView!) {
        let mydayview=dayView as! JTCalendarDayView
        dateSelected=mydayview.date as NSDate
    
        UIView.transition(with: mydayview, duration: 0.3, options: UIViewAnimationOptions(rawValue: 0), animations: {
           mydayview.circleView.transform = CGAffineTransform.identity
            self.calendarManager.reload()
        }, completion: nil)
    
        if(!calendarManager.dateHelper.date(calendarContentView.date, isTheSameMonthThan: mydayview.date)){
            if(calendarContentView.date.compare(mydayview.date) == ComparisonResult.orderedAscending)
            {
                calendarContentView.loadNextPageWithAnimation()
            }
            else{
                calendarContentView.loadPreviousPageWithAnimation()
            }
        }
      }
    
Jaywant Khedkar
  • 5,941
  • 2
  • 44
  • 55
Mili Shah
  • 1,456
  • 13
  • 21
3

I have just configured JTCalendar in Swift project using bridging.

  1. Download sample code

  2. Drag and drop JTCalendar folder in your project.

  3. Make sure bridging path is

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h

  1. set up IBOutlet and Delegate, rest of you have to figure out.
W.K.S
  • 9,787
  • 15
  • 75
  • 122
Hasya
  • 9,792
  • 4
  • 31
  • 46