又一个iOS的日历组件。兼容iOS 4.0(iPhone和iPad)及以上版本。
UI受到ocrickard的OCCalendarController的启发。这是一个相当不错的组件,但它缺少一些我希望看到的有用特性。不幸的是,OCCalendarController难以维护,所以我决定创建自己的实现。
PMCalendar支持在一个月或几个月内选择多个日期,呈现为一个弹出菜单(如果您之前使用过UIPopoverController,您会发现PMCalendar的管理方法非常相似),支持即时的方向更改,并且不需要任何第三方框架。
PMCalendar使用iOS的CoreGraphics和CoreText框架。
它肯定不是没有bug的,所以如果您打算将PMCalendar用于生产环境,请务必对其进行彻底测试;)
如果有什么问题或建议,请随时联系我。如果您知道如何改进PMCalendar,请不要犹豫,联系我或发送pull request。
PMCalendar采用MIT许可证发布。
PMCalendarController *calendarController = [[PMCalendarController alloc] initWithThemeName:@"my super theme name" andSize:CGSizeMake(300, 200)];
// default theme name (default.plist) and size (see default.plist for details)
PMCalendarController *calendarController = [[PMCalendarController alloc] init];
// default theme name (default.plist) and specific size
PMCalendarController *calendarController = [[PMCalendarController alloc] initWithSize:CGSizeMake(300, 200)];
// specific theme name and default calendar size for this theme
PMCalendarController *calendarController = [[PMCalendarController alloc] initWithThemeName:@"my super theme name"];
- (BOOL)calendarControllerShouldDismissCalendar:(PMCalendarController *)calendarController;
- (void)calendarControllerDidDismissCalendar:(PMCalendarController *)calendarController;
- (void)calendarController:(PMCalendarController *)calendarController didChangePeriod:(PMPeriod *)newPeriod;
calendarController.delegate = self;
[calendarController presentCalendarFromView:pressedButton
permittedArrowDirections:PMCalendarArrowDirectionUp | PMCalendarArrowDirectionLeft
isPopover:YES
animated:YES];
[calendarController presentCalendarFromRect:CGRectMake(100, 100, 10, 10)
inView:self.view
permittedArrowDirections:PMCalendarArrowDirectionUp | PMCalendarArrowDirectionLeft
isPopover:YES
animated:YES];
[calendarController dismissAnimated:YES];
@interface PMPeriod : NSObject
@property (nonatomic, strong) NSDate *startDate;
@property (nonatomic, strong) NSDate *endDate;
/**
* Creates new period with same startDate and endDate
*/
+ (id) oneDayPeriodWithDate:(NSDate *) date;
+ (id) periodWithStartDate:(NSDate *) startDate endDate:(NSDate *) endDate;
- (NSInteger) lengthInDays;
/**
* Creates new period from self with proper order of startDate and endDate.
*/
- (PMPeriod *) normalizedPeriod;
@end
@property (nonatomic, assign) id<PMCalendarControllerDelegate> delegate;
所选日期范围
@property (nonatomic, strong) PMPeriod *period;
允许选择的日期范围
@property (nonatomic, strong) PMPeriod *allowedPeriod;
星期一是周的第一天。如果设置为NO,则星期日是第一天
@property (nonatomic, assign, getter = isMondayFirstDayOfWeek) BOOL mondayFirstDayOfWeek;
如果设置为NO,则只能选择一个日期。否则,用户可以滑动以选择日期范围
@property (nonatomic, assign) BOOL allowsPeriodSelection;
如果设置为YES,用户可以长按箭头快速遍历月份
@property (nonatomic, assign) BOOL allowsLongPressMonthChange;
箭头方向(类似UIPopoverController的arrowDirection)
@property (nonatomic, readonly) PMCalendarArrowDirection arrowDirection;
日历控制器的大小
@property (nonatomic, assign) CGSize size;
返回弹窗是否可见(已展示)
@property (nonatomic, assign, readonly, getter = isCalendarVisible) BOOL calendarVisible;
主题允许你在不触碰PMCalendar代码的情况下创建自己的日历组件外观。理论上……在实践中,目前的实现是在组件绘制速度的灵活性和速度之间做出妥协。因此,某些你期望正常工作的主题属性可能不会工作 :)
然而,目前的实现已经足够强大,例如创建类似这样的东西
主题文档正在制作中,因此现在请使用两个示例("default.plist" 和 "apple calendar.plist")作为参考。
如果您想分享为PMCalendar创建的主题,请联系我,我会将其以及您项目的链接一起添加 :)