我是a calendar library for iOS的作者,我正在思考如何改进它,因为很明显人们并不了解它。
现在,我有一个只包含一个方法的数据源协议,它返回要在给定日期显示的事件:
- (NSArray *)calendarView:(CKCalendarView *)calendarView eventsForDate:(NSDate *)date;
但是,我发现在图书馆可用的两年内,我得到的大部分反馈都是,"我如何在日历上显示活动?" #34;
我一直以为这很直观:
我还能做些什么来让其他开发人员更清楚我打算如何使用它?
答案 0 :(得分:6)
您的用户需要可以复制和粘贴的代码,然后进行编辑以适应她的问题。她不想阅读有关接口的内容,然后从头开始实现它。所以在您的文档中放置了CKCalendarViewDataSource
的玩具实现。玩具实现需要开箱即用。您的用户应该能够将其粘贴到项目中,编译并在日历视图中查看事件。玩具可以使用硬编码的事件阵列(根据需要调用[NSDate now]
以确保默认日历月显示事件)。
我认为在README中提供一个可行的示例实现将最大限度地减轻您的支持问题。
您的用户不希望实现回调。她没有考虑等待回答问题;她想告诉你的图书馆该做什么。
向视图添加events
属性,该属性是CKCalendarEvent
的数组。让用户设置events
或dataSource
。如果有超过几十个事件,请注意您建议使用dataSource
的文档和标题注释。如果用户同时设置两者,则引发异常。
如果您不断被问到“我如何在日历上显示活动?”,那么将该语言添加到您的文档中。您的文档中可以多余!文档适用于人类,人类需要冗余。
您可以使用大部分标题说“如何向日历添加事件”和“如何在日历上显示事件”和“如何在日历上显示事件”,它们都可以说同样的事情(理想情况下是示例代码)或只是链接到“显示事件”部分。
在CKCalendarView
需要数据源UITableView
的文档中,在顶部附近说明。要明确!你和我认识到这种模式,但显然你的用户没有。
提供更好的数据源界面。按NSDate
查找事件并不理想,因为NSDate
指定的是即时时间,而不是一整天。您希望事件属于给定的日历日,但您不关心事件的时间。你是否经过了感兴趣的当天午夜?如果活动是在上午8点怎么办?更糟糕的是,如果活动是在上午12:01的第二天,夏令时从感兴趣的那天开始怎么办?并非所有日子都是86,400秒!不要让用户在NSCalendar
附近捣乱;为她做。
我更喜欢这样的消息:
- (NSArray *)calendarView:(CKCalendarView *)calendarView
eventsOnOrAfterDate:(NSDate *)startingDate
beforeDate:(NSDate *)endingDate;
通过startingDate
感兴趣日期的午夜(or 1 AM on certain days in certain time zones)。通过第二天的午夜endingDate
。请注意,您应该允许用户指定日历的时区来计算这些NSDate
(但默认为[NSTimeZone systemTimeZone]
)。
如果您的用户按日历日存储她的事件而不是精确的时间戳,那么也可以指定以下消息:
- (NSArray *)calendarView:(CKCalendarView *)calendarView
eventsForYear:(int)year month:(int)month day:(int)day;
答案 1 :(得分:0)
我会选择CKCalendarEvent
协议:
@protocol CKCalendarEvent <NSObject>
- (NSDate *)date;
- (NSString *)title;
- (NSDictionary *)info;
- (UIColor *)color;
@end
因此用户可以使用events
属性直接在数组中提供事件:
calendar.events = @[ event1, event2, ... ];
答案 2 :(得分:0)
更改CKCalendarView
示例:
CKCalendarView *calendar = [[CKCalendarView alloc] initWithDataSource:self];
或
CKCalendarView *calendar = [[CKCalendarView alloc] initWithEventLoader:self];