我有一个非常标准的UITableView,有部分(A-Z - 没有数字或搜索)。
我已经实现了委托方法,这些方法启用了表格右侧的部分索引(A-Z栏)视图。
我现在已经在表格中输入了足够的数据,这样大多数(不是全部)部分(即A,B,C ...... Z)都有一个或几个单元格。
但是我注意到,现在该应用程序处于私有测试状态,当有人触摸部分索引的字母时,表跳转到的实际位置是不正确的。
它实际上对A,B和C来说是正确的,然后逐渐变得越来越错 - 这样Z实际上就是'R'在条形图上的位置。
这是在iPad(仅限)上,并没有为表格或部分索引视图进行特殊的“幕后”自定义。
有什么想法吗?我一直在谷歌搜索近一个小时,找不到之前见过的人。
编辑:
以下是我设置章节索引的代码:
- ( NSArray * ) sectionIndexTitlesForTableView:( UITableView * )tableView
{
[self customizeSectionIndexView]; // This just changes colours in iOS 7+
return [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil];
}
- ( NSString * ) tableView:( UITableView * )tableView titleForHeaderInSection:( NSInteger )section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsControllerWithPredicate sections] objectAtIndex:section];
return [sectionInfo name];
}
- ( NSInteger ) numberOfSectionsInTableView:( UITableView * )tableView
{
NSInteger sectionCount = [[self.fetchedResultsControllerWithPredicate sections] count];
return sectionCount;
}
- ( NSInteger ) tableView:( UITableView * )tableView numberOfRowsInSection:( NSInteger )section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsControllerWithPredicate sections][section];
return [sectionInfo numberOfObjects];
}
所以我最多有26个部分,但我只是试图展示那些包含细胞的部分。这是我出错的地方吗?
当数据从Core Data进入并且可以随时更改时,如何处理此状态?
答案 0 :(得分:2)
你需要确保你拥有与索引一样多的部分,例如,如果你正在做A..Z,你需要26个索引(“A”,“B”,“C”等)以及26表格部分。
如果您还将表格部分标题显示为字母,并且如果该部分中没有单元格,则不希望显示部分标题,则可以为该部分返回nil。
我就是这样做的:
-(NSArray*) letters {
return @[@"#", @"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z"];
}
-(NSArray*) sectionIndexTitlesForTableView:(UITableView*)tableView {
return [self letters];
}
-(NSInteger) numberOfSectionsInTableView:(UITableView*)tableView {
return [self letters].count;
}
-(NSString*) tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section {
// Get array of items in this section
NSArray* sectionItems = [allSections objectAtIndex:section];
// Return letter, or nil if no items in this section
return (sectionItems.count > 0 ? [[self letters] objectAtIndex:section] : nil);
}