3

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

请建议。

4

2 回答 2

8
  • 在 podfile 中写入 pod 'JTCalendar', '~> 2.0' 并安装 pod。
  • 创建一个具有自定义类 JTCalendarMenuView 的视图并将引用插座作为 calendarMenuView
  • 创建另一个具有自定义类 JTHorizo​​ntalCalendarView 的视图并将引用出口作为 calendarContentView
  • 导入 JTCalendar 并实现 JTCalendar 委托

    导入 JTCalendar
    类 ViewController: UIViewController , JTCalendarDelegate

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

    @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 ,赋予 delegte 并设置 menuview 、 contentview 和 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)
    }
    
  • 为要在日历中显示的最小和最大日期创建函数。

     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()
            }
        }
      }
    
于 2017-02-28T06:18:10.717 回答
3

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

  1. 下载示例代码

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

  3. 确保桥接路径是

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

  1. 设置 IBOutlet 和 Delegate,剩下的你们自己想办法。
于 2016-04-28T11:39:11.110 回答