sectionIndexTitlesForTableView与部分正确对齐

Rud*_*ger 3 iphone uitableview nsarray

我有一个包含许多部分的表视图,这些部分的标题只是AZ和#就像在iPhone地址簿App中一样.我已经实现了sectionIndexTitlesForTableView来快速移动到特定的字母,基本上只返回一个字母A - Z和#的数组.

如果我的列表总是包含字母表中每个字母的一个项目,但它不会,这会使部分索引标题搞砸了,因为如果第3个部分是D(即如果有的话),在列表中点击C可能会转到D C)部分没有任何内容.

我知道我可以在sectionIndexTitlesForTableView中返回数组,只有字母是部分,但这看起来有点奇怪,与iPhone地址簿应用程序的功能不同.

我怎么能纠正这个?

Dan*_*ood 6

如果您只有AZ的部分A,C,F,S,T和部分索引标题,我不会看到@Rudiger的方法是如何工作的.使用MPMediaQuery时可能会出现这种情况.

为了解决这个问题,我已经按如下方式实现了这个方法,如果你要查找的那个不存在,tableview将滚动到正确的部分或下一个.

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    NSString *sectionTitle = nil;
    NSComparisonResult result;
    int i;

    for(i = 0; i < tableView.numberOfSections; i++)
    {
        sectionTitle = [self tableView:tableView titleForHeaderInSection:i];
        result = [title compare:sectionTitle];

        if(result != NSOrderedDescending)
            break;
    }

    return (MIN (i, (tableView.numberOfSections - 1)));
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

更改了返回值以修复Eric D'Souza所描述的情况.

  • 这种方法很有效,除非用户触摸超出最后一个节标题的索引(例如,如果用户触摸索引Z,并且最后一个截面索引是Y).我刚刚修改了返回:"return(MIN(i,(tableView.numberOfSections - 1)));" (2认同)