我要做的是检测UITableView
的哪些部分可见,然后根据可见的日历更改日历的日期。
问题是通常可以同时查看多个部分,我只想根据visibleRowIndexes
中显示的第一部分索引更改日期,而不是全部。
这是我当前的实现(注意:我在cellForRowAtIndexPath中运行此函数):
-(BOOL)whatSectionsAreVisible {
NSArray *visibleRowIndexes = [self.agendaTable indexPathsForVisibleRows];
for (NSIndexPath *index in visibleRowIndexes) {
NSNumber *daySection = @(index.section);
static NSDateFormatter *dateFormatter = nil;
if(!dateFormatter){
dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"yyyy-MM-dd"; // Read the documentation for dateFormat
}
// Here is where I will map every index.section to an NSDate
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:daySection.intValue]; // <<== Extract int from daySection
[comps setMonth:6];
[comps setYear:2015];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *date = [gregorian dateFromComponents:comps];
// Update the day selected according to visible section
[[NSNotificationCenter defaultCenter] postNotificationName:@"kJTCalendarDaySelected" object:date];
// Store currentDateSelected
[self.calendar setCurrentDateSelected:date];
NSLog(@"The visible section has an index of: %ld", (long)index.section);
if (index.section == 0) {
NSLog(@"index.row is indeed 0");
return YES;
}
}
return NO;
}
我尝试过NSNumber *daySection = @(index[0].section);
而不是NSNumber *daySection = @(index.section);
,但这似乎不起作用。
答案 0 :(得分:1)
如果您只想要第一个可见的行,请不要使用循环。获取visibleRowIndexes
的第一个对象作为NSIndexPath。然后从那里得到部分。
答案 1 :(得分:0)
indexPathsForVisibleRows
方法以升序返回索引路径。因此,摆脱for
循环并仅为第一个对象执行代码:
NSArray *visibleRowIndexes = [self.agendaTable indexPathsForVisibleRows];
NSIndexPath *index = [visibleRowIndex objectAtIndex:0];