MDCalendar
是一个用于 iOS 7(及以上)的日历式日期选择器,它使用 UICollectionView
以流行的“月视图”格式排列日历。
MDCalendar
在设计时注重灵活性,因此被实现为 UIView
的子类。这意味着日历可以作为一个子视图实例化,添加到现有的视图层次结构中,或者作为 UIViewController
的唯一视图添加到导航栈中。后者在 MDCalendarDemo
项目中得到了演示。
在设计和 MDCalendar
时,我们采用了最小化基于显式存储的模型的理念。因此,绝大多数日期和几何数学都是在运行时计算的。特别是对于几何计算,我们已经实现了缓存,并且 MDCalendar
已用 [NSDate distantFuture]
的 endDate
进行了测试。
假设一个名为 EventDetailsViewController
的视图控制器希望允许用户使用漂亮的日历选择器修改活动日期。嗯...让我们用 MDCalendar
来做这个!EventDetailsViewController
是 UITableViewController
的子类,选择任何一行应该将日历推上屏幕,并允许用户修改 EventDetailsViewController
的 eventDate
属性
建议的实现方法是创建一个稀疏的视图控制器来显示 MDCalendar
(请参考示例项目以了解如何操作)。这个视图控制器,让我们称它为 MDEventCalendarViewController
(富有创意,我知道),将被推入导航栈。
在上面的示例中,我们需要将日历事件从子控制器类通讯回父视图控制器。为了优雅地做到这一点,我们需要在 MDEventCalendarViewController
中子类化 MDCalendarDelegate
并在视图控制器头文件中暴露这个协议,MDEventCalendarDelegate
。现在,父视图控制器,EventDetailsViewController
,可以设置其代理:id<MDEventCalendarDelegate>delegate
此代理将基本传递来自 MDCalendarDelegate
的消息到父视图控制器。子类化 MDCalendarDelegate
的优点是,如果重新使用您的稀疏视图控制器,它可以包含一些关于如何处理 MDCalendarDelegate
事件的逻辑。
MDCalendar 1.0.0 版本具备对 VoiceOver 的支持,并为每个日期提供了适当的可访问性标签。