iOS Section Index滚动到错误的位置

时间:2013-12-02 12:18:08

标签: ios uitableview scroll indexing

我有一个非常标准的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进入并且可以随时更改时,如何处理此状态?

1 个答案:

答案 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);

}