sectionIndexTitlesForTableView与部分正确对齐

时间:2010-11-15 05:33:51

标签: iphone uitableview nsarray

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

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

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

我该如何纠正这个?

2 个答案:

答案 0 :(得分:6)

如果您只有A,Z,A,C,F,S,T和A-Z的区段索引标题,我看不出@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)));
}

<强>更新

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

答案 1 :(得分:3)

基本上你必须实施:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    return [sections indexOfObject:title];
}

并根据索引和标题返回它应该在哪个部分。其中sections是存储节列表的数组