【问题标题】:Tapku calendar not showing events when selecting day in different monthTapku 日历在选择不同月份的日期时不显示事件
【发布时间】:2013-08-21 19:46:53
【问题描述】:

我是 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

【问题讨论】:

  • 我会说 6 月份的 tableview 没有调整大小
  • 对不起,我不太明白你的意思。我已经在 12 月、1 月、3 月进行了测试......并且总是发生同样的行为。它也发生在以 5 行(周)呈现的月份网格中,例如 1 月或 5 月(而不是像 6 月那样的 6 行)
  • 无论如何:我们无法判断它是否是错误,因为您没有显示您的代码。我会投票赞成关闭,因为这不是一个真正的问题。
  • 如果你使用了适当的缩进,它会更容易阅读。
  • 我是 StackOverflow 的新手。我正尽最大能力。对不起..

标签: ios objective-c cocoa-touch calendar tapku


【解决方案1】:

我认为问题存在于此:

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

TKCalendarMonthView.m 内部

一般情况下,当月份不发生变化时,会调用这个方法:

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

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

【讨论】:

    【解决方案2】:

    我认为这是一个错误。

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

    NSDate *dateSelected = self.monthView.dateSelected;
    

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多