我正在实现一个表索引视图,并惊讶地看到我的表索引如何工作,即使没有实现:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index method.
我只实施了:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
奇怪的是,当我在断点运行时,一旦我点击任何索引值我
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法正在被调用。
任何线索为什么会发生这种情况,那么sectionForSectionIndexTitle方法的意义是什么。
答案 0 :(得分:1)
如果您有一个字母表中的所有字母列表,而您的列表中只包含一些条目,则可以使用以下代码:
//要求数据源返回具有给定标题和节标题索引的节的索引。 - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
if (tableView == self.searchDisplayController.searchResultsTableView || self.searchBar.text.length > 0)
{
return 0;
}
else
{
//direct - firsttime match
if([self.realMIndexArray containsObject:title]) {
NSInteger count = 0;
for(NSString *character in self.realMIndexArray)
{
if([character isEqualToString:title]){
return count;
}
count ++;
}
}
else {
//take next higher letter from alphabet and check if its contained in the "available letters list"
//if not, select last entry of list
for(int i = [self.indexArray indexOfObject:title] + 1; i < [self.indexArray count]; i++) {
NSString* character = [self.indexArray objectAtIndex:i];
if([self.realMIndexArray containsObject:character]) {
return [self.realMIndexArray indexOfObject:character];
}
}
return [self.realMIndexArray count] - 1;
}
return 0;// in case of some eror donot crash d application
}
}
realMIndexArray count ==列表中确实存在的字母 indexArray = alphbeth中所有字母的列表。
希望这有助于某人(花了我一点时间来弄清楚)
答案 1 :(得分:0)
任何线索为何会发生这种情况
是。当您在表的索引上点击(不点击iPhone)时,基础表视图将要跳转到该部分以及该部分中的单元格。为了做到这一点,它必须向数据源询问这些单元格,以便它可以在屏幕上呈现它们。
有什么意义 sectionForSectionIndexTitle方法 然后
tableView:sectionForSectionIndexTitle:atIndex:
的文档(这是UITableViewDataSource
协议中的可选方法)说:
要求数据源返回 具有给定的部分的索引 标题和章节标题索引。
和
您仅为此实现此方法 带有节索引的表视图 list - 只能是表视图 以朴素的风格创造 (UITableViewStylePlain)。
这是否适用于您的UITableView
?换句话说,您使用的是分组表视图样式吗?