我是 Tapku 的新手,但我认为这可能是一个错误:
- 假设您在 2013 年 5 月。在月份网格中,您可以看到(灰显)4 月的最后 3 天(28 日、29 日和 30 日)和 6 月的第一天。通常,您还可以在每天的底部看到“项目符号”,指示该特定日期发生的事件。在我的示例中,您可以在 6 月 1 日看到一个标记。
- 现在点击 6 月 1 日。正如预期的那样,日历网格切换到 2013 年 6 月,并将刚刚点击的那一天(6 月 1 日)标记为选中。问题是现在您应该会看到 6 月 1 日发生的事件列表,但没有显示任何内容(即使该天的“标记”仍然出现,正如预期的那样)。
- 如果(在当前选定月份网格的某一天)您点击有事件的一天,一切正常。在我的示例中,我点击了 6 月 15 日。您可以看到现在日历网格下出现了一个事件。
- 在 6 月 1 日再次点击,现在我们可以看到当天发生的事件(安娜哈罗的生日):
我一直在搜索代码,试图找出是否是我的错,但找不到任何线索..
感谢您的帮助。谢谢
更新代码:
TapkuCalendarViewController.h
#import <TapkuLibrary/TKCalendarMonthTableViewController.h>
@interface TapkuCalendarViewController : TKCalendarMonthTableViewController
@end
TapkuCalendarViewController.m
#import "TapkuCalendarViewController.h"
#import "EventKitController.h"
@implementation TapkuCalendarViewController
- (void) viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Today"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(selectTodayDate)];
[self.monthView selectDate:[NSDate date]];
}
- (void)selectTodayDate {
[self.monthView selectDate:[NSDate date]];
}
#pragma mark MonthView Delegate & DataSource
- (NSArray*)calendarMonthView:(TKCalendarMonthView *)monthView marksFromDate:(NSDate *)startDate toDate:(NSDate *)lastDate {
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit
fromDate:startDate
toDate:lastDate
options:NSWrapCalendarComponents];
NSInteger numberOfDays = components.day +1;
NSMutableArray *array = [NSMutableArray arrayWithCapacity:numberOfDays];
NSDate *day = startDate;
for (int x = 0; x<numberOfDays; x++) {
if ([[EventKitController listOfEventkitEventsAtDay:day] count] != 0) [array addObject:[NSNumber numberWithBool:YES]];
else [array addObject:[NSNumber numberWithBool:NO]];
if (x < numberOfDays-1) day = [day dateByAddingOneDay]; // private category method
}
assert([day isEqualToDate:lastDate]);
return array;
}
- (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)newDate {
[self.tableView reloadData];
}
#pragma mark UITableView Delegate & DataSource
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSDate *dateSelected = self.monthView.dateSelected;
if (dateSelected == nil) return 0;
else return [[EventKitController listOfEventkitEventsAtDay:dateSelected] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *const CELL_ID = @"TapkuCalendarCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_ID];
if (cell == nil) cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CELL_ID];
EKEvent *event = [[EventKitController listOfEventkitEventsAtDay:self.monthView.dateSelected] objectAtIndex:indexPath.row];
cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", event.startDate, event.title];
cell.detailTextLabel.text = event.location;
return cell;
}
@end