代码之家  ›  专栏  ›  技术社区  ›  Rudiger

sectionIndexTitlesForTableView与节正确对齐

  •  3
  • Rudiger  · 技术社区  · 14 年前

    我有一个包含许多部分的表格视图,这些部分的标题只是a-Z和#就像在iPhone通讯录应用程序中一样。我实现了sectionIndexTitlesForTableView,可以快速移动到特定的字母,基本上只返回一个字母数组A-Z和#。

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

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

    我该怎么纠正?

    2 回复  |  直到 10 年前
        1
  •  6
  •   Daniel Wood    12 年前

    我不知道@Rudiger的方法如果只有A、C、F、s、t节和A-Z节的索引标题会如何工作。使用MPMediaQuery时可能会出现这种情况。

    为了实现这一点,我已经实现了如下方法,TabLVIEW将滚动到正确的部分或下一个,如果你找的那个不存在。

    - (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描述的情况。

        2
  •  3
  •   Rudiger    14 年前

    基本上你必须实施:

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

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