我有一个包含许多部分的表视图,这些部分的标题只是A-Z和#就像在iPhone地址簿App中一样。我已经实现了sectionIndexTitlesForTableView来快速移动到特定的字母,基本上只返回一个字母A - Z和#的数组。
如果我的列表总是包含字母表中每个字母的一个项目,但它不会,这会搞定,这会搞定部分索引标题,因为如果第3部分是D,则点击列表中的C可能会转到D(即如果C)部分没有任何内容。
我知道我可以在sectionIndexTitlesForTableView中返回数组,只包含部分字母,但这看起来有些奇怪,与iPhone地址簿应用程序的功能不同。
我该如何纠正这个?
答案 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是存储节列表的数组