我正在使用 JTCalendar 创建自定义日历。我在 Objective-C 中使用 JTcalendar 创建了它。现在我想在 Swift 中使用它。我试过使用 Briding-Header 但它仍然显示 JTCalendar 文件不存在错误。
请建议。
我正在使用 JTCalendar 创建自定义日历。我在 Objective-C 中使用 JTcalendar 创建了它。现在我想在 Swift 中使用它。我试过使用 Briding-Header 但它仍然显示 JTCalendar 文件不存在错误。
请建议。
导入 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()
}
}
}
我刚刚使用桥接在 Swift 项目中配置了 JTCalendar。
将 JTCalendar 文件夹拖放到您的项目中。
确保桥接路径是
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h