0

我是 Tapku 的新手,但我认为这可能是一个错误:

  1. 假设您在 2013 年 5 月。在月份网格中,您可以看到(灰显)4 月的最后 3 天(28 日、29 日和 30 日)和 6 月的第一天。通常,您还可以在每天的底部看到“项目符号”,指示该特定日期发生的事件。在我的示例中,您可以在 6 月 1 日看到一个标记。
  2. 现在点击 6 月 1 日。正如预期的那样,日历网格切换到 2013 年 6 月,并将刚刚点击的那一天(6 月 1 日)标记为选中。问题是现在您应该会看到 6 月 1 日发生的事件列表,但没有显示任何内容(即使该天的“标记”仍然出现,正如预期的那样)。

五月和六月

  1. 如果(在当前选定月份网格的某一天)您点击有事件的一天,一切正常。在我的示例中,我点击了 6 月 15 日。您可以看到现在日历网格下出现了一个事件。
  2. 在 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
4

2 回答 2

0

我相信这里存在问题:

- (void) _tileSelectedWithData:(NSArray*)ar{

TKCalendarMonthView.m 内部

通常,当月份没有发生变化时,调用此方法:

[self.delegate calendarMonthView:self didSelectDate:[self dateSelected]];

但是,当确实发生月份更改时,不会调用此方法并且不会更新相关的表视图数据。添加对此方法的调用为我解决了这个问题。

于 2013-05-28T20:55:23.807 回答
0

我认为这是一个错误。

didSelectDate: 在月份更改期间正常调用,但月份视图的选定日期属性被清除。所以它会重新加载表格视图,但是当它到达时

NSDate *dateSelected = self.monthView.dateSelected;

这导致您的空表self.monthView.dateSelectednil

解决方案:我已经在结束时自己跟踪上次选择的日期

 - (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)newDate

然后lastSelectedDate在表视图数据源方法中使用此变量。选择更改月份的日期时,表格视图会获取并显示正确的数据(如您的示例)。

于 2013-08-21T11:46:53.843 回答