如何在Swift中使用JTCalendar?

时间:2016-04-28 10:33:49

标签: ios swift uikit jtcalendar

我正在使用JTCalendar创建自定义日历。我在Objective-C中使用JTcalendar创建了它。现在我想在Swift中使用它。我尝试过使用Briding-Header,但仍然显示JTCalendar文件不存在错误。

请建议。

2 个答案:

答案 0 :(得分:7)

  • 在podfile中写入'JTCalendar','〜> 2.0'并安装pod。
  • 创建一个具有自定义类JTCalendarMenuView&提供refrencing outlet作为calendarMenuView
  • 创建另一个具有自定义类JTHorizo​​ntalCalendarView&将引用插座作为calendarContentView
  • 导入JTCalendar并实现JTCalendar委托

    导入JTCalendar
    class ViewController:UIViewController,JTCalendarDelegate

  • 为CalendaManager创建插座并声明我们稍后使用的一些变量。

    @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()
    
  • 在ViewDidLoad中初始化CalendarManager,给出delegete并设置menuview,contentview和setDate。

    override func viewDidLoad() {
    
    super.viewDidLoad()
    
    calendarManager = JTCalendarManager.init()
    calendarManager.delegate = self
    
    createMinAndMaxDate()
    
    calendarManager.menuView = calendarMenuView
    calendarManager.contentView = calendarContentView
    let mydate = Date()
    calendarManager.setDate(mydate)
    }
    
  • 创建要在日历中显示的最短和最长日期的函数。

     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
    
    }
    
  • 在canDisplayPageWithDate方法中设置最小和最大日期

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

    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
        }
    
    }
    
  • 使用didTouchDayView方法在用户选择和特定日期时设置动画,如果选择该日期,则移至下一个月和上个月

    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()
            }
        }
      }
    

答案 1 :(得分:3)

我刚刚使用桥接在Swift项目中配置了JTCalendar。

  1. Download sample code

  2. 将JTCalendar文件夹拖放到项目中。

  3. 确保桥接路径为

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

    1. 设置IBOutlet和Delegate,其他人必须弄明白。