CKCalendar是一个时尚可定制的 iOS 日历控件。只需将头文件、实现文件和资源文件添加到您的项目中,并链接到它的框架依赖关系:QuartzCore 和 CoreGraphics。
默认日历设计归功于John Anderson。谢谢John!
CKCalendar提供了代理回调以与日历交互。首先,确保设置您的CKCalendarView
实例的delegate
属性
- (void)someMethod {
CKCalendarView *calendar = [[CKCalendarView alloc] init];
[self.view addSubview:calendar];
calendar.delegate = self;
}
CKCalendarDelegate
协议中有一系列代理方法,使自定义和扩展日历行为变得简单。
当用户尝试选择一个日期(通过点击)时,如果您的代理实现了,日历将调用它的calendar:willSelectDate:
方法,传入用户选择的日期。返回NO
将拒绝选择。例如,如果您开发的应用是用于预订的,那么您可能不会允许选择已被预订的日期。您可能这样做:
- (BOOL)calendar:(CKCalendarView *)calendar willSelectDate:(NSDate *)date {
// don't let people select dates in previous/next month
return [calendar dateIsInCurrentMonth:date];
}
选择日期后,如果您的代理实现了,日历将调用您的代理的calendar:didSelectDate:
方法。您可以使用此回调来跟踪用户选择的日期
- (void)calendar:(CKCalendarView *)calendar didSelectDate:(NSDate *)date {
[_chosenDates addObject:date];
}
当用户点击一个已选择的日期时,日历将按照上述描述的相同方式调用calendar:willDeselectDate:
,然后调用calendar:didDeselectDate:
。
- (void)calendar:(CKCalendarView *)calendar didDeselectDate:(NSDate *)date {
NSLog(@"User didn't like date %@", date);
}
同样,当用户尝试跳转到上一个或下一个月时,日历将给代理调用calendar:willChangeToMonth:
(如果代理实现了),让您有机会决定是否允许这样做。在月份改变后,将调用calendar:didChangeToMonth:
代理方法,并将这个月的第一天传递给代理。
- (BOOL)calendar:(CKCalendarView *)calendar willChangeToMonth:(NSDate *)date {
// Of course we want to let users change months...
return YES;
}
- (void)calendar:(CKCalendarView *)calendar didChangeToMonth:(NSDate *)date {
NSLog(@"Hurray, the user changed months!");
}
要完全控制显示的日期,可以实现代理方法calendar:configureDateItem:forDate:
。日历将传递一个CKDateItem
实例给它的代理;这个dateItem可以被修改,这将影响它所代表的日期的显示。
- (void)calendar:(CKCalendarView *)calendar configureDateItem:(CKDateItem *)dateItem forDate:(NSDate *)date {
// If the date has been chosen by the user, go ahead and style it differently
if ([_chosenDates containsObject:date]) {
dateItem.backgroundColor = [UIColor greenColor];
}
}
您可以通过启用完全填充当前月份之前和之后的日期选项卡空间来实现。
calendarView.onlyShowCurrentMonth = NO;
此日历旨在易于样式化,以便您可以使它在其应用中感觉无缝。您几乎可以自定义每个元素的字体、文字颜色和背景颜色。您还可以配置日历应从星期几开始。此日历允许您设置可选的最小和/或最大可选日期(这也可以进行样式化)。如果还有尚未满足的功能,请添加它!目前代码可读性高且易于扩展。享受吧!
版权所有 © 2013 Jason Kozemczak
特此授予任意获取此软件及其相关文档(统称“软件”)副本的个人,在此软件上无限制地进行处理的权限,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权力,并允许向提供软件的个人进行前述操作的权限,但需遵守以下条件
所有软件副本或实质性部分必须包含上述版权声明和本许可协议声明。
软件按“现状”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途适用性和非侵权性担保。在任何情况下,作者或版权所有者均不对任何主张、损害或其他责任承担责任,无论源于合同、侵权或任何其他行为,亦无论源于、出自或与软件或软件的使用或其他处理相关。