0
点赞
收藏
分享

微信扫一扫

[IOS]第三方日历组件CVCalendar


1.简介:

一款简单好用的第三方日历开源组件.

 

2.安装:

参考:https://github.com/CVCalendar/CVCalendar

 

根据上一篇博文,使用cocoaPod安装:

pod 'CVCalendar', '~> 1.6.1'

 注意,在github的介绍上分为storyboard加载和手动加载.但是经过我的试验,不知道为什么通过storyboard加载,日历部分会加载不成功.所以,这次还是采用手动加载.

就是在storyboard里面弄连个UIView,一个准备加载CVCalendarMenuView,另一个加载CVCalendarView.但是我们不在storyboard上面给两个view定义类.

在controller里:

声明

var viewCalendarMenu: CVCalendarMenuView!
var viewCalendar: CVCalendarView!

 新建一个function,初始化两个Calendar类:

func initCalendar()->Void{
/*
* 在页面顶端显示当前的日期
*/
let currentCalendar:Calendar = Calendar.init(identifier: .gregorian)
dateLabel.text = CVDate(date: Date(), calendar: currentCalendar).commonDescription

/*
* 初始化日历菜单
*/
viewCalendarMenu = CVCalendarMenuView(frame: CGRect(x:menuView.bounds.origin.x,y:menuView.bounds.origin.y, width:menuView.bounds.size.width, height:menuView.bounds.size.height))

/*
* 初始化日历
*/
viewCalendar = CVCalendarView(frame: CGRect(x:calendarView.bounds.origin.x, y:calendarView.bounds.origin.y, width:calendarView.bounds.size.width, height:calendarView.bounds.size.height))

/*
* 为日历菜单注册代理
*/
viewCalendarMenu.menuViewDelegate = self

/*
* 为日历注册代理
*/
viewCalendar.calendarDelegate = self

/*
* 将日历组件放在界面上
*/
menuView.addSubview(viewCalendarMenu)
calendarView.addSubview(viewCalendar)
}

 还有必须要加入:

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

viewCalendarMenu.commitMenuViewUpdate()
viewCalendar.commitCalendarViewUpdate()
}

 

最后继承delegate:

extension BookDateViewController: CVCalendarViewDelegate,CVCalendarMenuViewDelegate{
func presentationMode() -> CalendarMode {
return .monthView
}

func firstWeekday() -> Weekday {
return .monday
}

func presentedDateUpdated(_ date: CVDate) {
//导航栏显示当前日历的年月
dateLabel.text = date.globalDescription
}

//每个日期上面是否添加横线(连在一起就形成每行的分隔线)
func topMarker(shouldDisplayOnDayView dayView: CVCalendarDayView) -> Bool {
return true
}

func dotMarker(shouldShowOnDayView dayView: DayView) -> Bool {
if !dayView.isHidden && dayView.date != nil {
//获取该日期视图的年月日
let year = dayView.date.year
let month = dayView.date.month
let day = dayView.date.day

let calendar = NSCalendar.current
var comps: DateComponents = DateComponents()
comps = calendar.dateComponents([.year,.month,.day], from: Date())

//判断日期是否符合要求
if year == comps.year && month == comps.month && day == comps.day {
return true
}
}
return false
}

func dotMarker(colorOnDayView dayView: DayView) -> [UIColor] {
return [UIColor.lightGray]
}

func dotMarker(moveOffsetOnDayView dayView: DayView) -> CGFloat {
return 10
}


//日期选择响应
func didSelectDayView(_ dayView: CVCalendarDayView, animationDidFinish: Bool) {
//获取日期
let date = dayView.date.convertedDate()!
// 创建一个日期格式器
let dformatter = DateFormatter()
dformatter.dateFormat = "yyyy年MM月dd日"
let message = "当前选择的日期是:\(dformatter.string(from: date))"
//将选择的日期弹出显示
let alertController = UIAlertController(title: "", message: message,preferredStyle: .alert)
let okAction = UIAlertAction(title: "确定", style: .cancel, handler: nil)
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
}

}

 可以看到delegate里面就有calendar类的各种API可以调用.可以自定义分割线,灰点,点击事件等等.

有些再深入一些的UI修改可能就需要修改源码了,例如分割线的颜色,灰点的初始位置等等,API都没给出接口.

 

一些用法可以参考:http://www.hangge.com/blog/cache/detail_1504.html

 

举报

相关推荐

0 条评论