Iphone 表视图中的节索引
我正在实现一个表索引视图,看到我的表索引在没有实现以下功能的情况下是如何工作的,我感到非常惊讶:Iphone 表视图中的节索引,iphone,Iphone,我正在实现一个表索引视图,看到我的表索引在没有实现以下功能的情况下是如何工作的,我感到非常惊讶: - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index method. 我只实施了: - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)table
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index method.
我只实施了:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
奇怪的是,当我在断点中运行时,一旦我单击我的任何索引值
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法正在被调用
任何线索为什么会发生这种情况,以及sectionForSectionIndexTitle方法的意义是什么
你知道为什么会这样吗
对。当您点击(不要点击iPhone)表的索引时,基础表视图将希望跳转到该部分,以及该部分中的单元格。为了做到这一点,它必须向数据源询问这些单元格,以便在屏幕上渲染它们
它的意义是什么
sectionForSectionIndexTitle方法
那么
的文档(这是UITableViewDataSource
协议中的可选方法)说明:
要求数据源返回
具有给定属性的节的索引
标题和章节标题索引
及
您实现此方法仅用于
带有节索引的表视图
只能是表视图的列表
以朴素的风格创建
(UITableViewStylePlain)
这是否适用于您的UITableView
?换句话说,是否使用分组表视图样式
你知道为什么会这样吗
对。当您点击(不要点击iPhone)表的索引时,基础表视图将希望跳转到该部分,以及该部分中的单元格。为了做到这一点,它必须向数据源询问这些单元格,以便在屏幕上渲染它们
它的意义是什么
sectionForSectionIndexTitle方法
那么
的文档(这是UITableViewDataSource
协议中的可选方法)说明:
要求数据源返回
具有给定属性的节的索引
标题和章节标题索引
及
您实现此方法仅用于
带有节索引的表视图
只能是表视图的列表
以朴素的风格创建
(UITableViewStylePlain)
这是否适用于您的
UITableView
?换句话说,您是否使用分组表视图样式?如果您有一个字母表中所有字母的列表,并且列表中只包含一些条目,则可以使用以下代码:
//要求数据源返回具有给定标题的节的索引和节标题索引。
-(NSInteger)tableView:(UITableView*)分区索引的tableView部分exttitle:(NSString*)标题索引:(NSInteger)索引{
if(tableView==self.searchDisplayController.searchResultsTableView | | self.searchBar.text.length>0)
{
返回0;
}
其他的
{
//直接第一次比赛
if([self.realMIndexArray containsObject:title]){
NSInteger计数=0;
for(self.realMIndexArray中的NSString*字符)
{
if([字符IsequalString:title]){
返回计数;
}
计数++;
}
}
否则{
//从字母表中选取下一个较高的字母,并检查其是否包含在“可用字母列表”中
//如果没有,请选择列表的最后一项
for(int i=[self.indexArray indexOfObject:title]+1;i<[self.indexArray count];i++){
NSString*字符=[self.indexArray objectAtIndex:i];
if([self.realMIndexArray containsObject:character]){
返回[self.realmindexorray indexOfObject:character];
}
}
返回[self.realMIndexArray count]-1;
}
返回0;//如果某个eror donot使d应用程序崩溃
}
}
realMIndexArray count==列表中实际存在的字母
indexArray=alphbeth中所有字母的列表
希望这对某人有所帮助(我花了一点时间来弄清楚)如果您有一个字母表中所有字母的列表,并且列表中只包含一些条目,您可以使用以下代码: //要求数据源返回具有给定标题的节的索引和节标题索引。 -(NSInteger)tableView:(UITableView*)分区索引的tableView部分exttitle:(NSString*)标题索引:(NSInteger)索引{
if(tableView==self.searchDisplayController.searchResultsTableView | | self.searchBar.text.length>0)
{
返回0;
}
其他的
{
//直接第一次比赛
if([self.realMIndexArray containsObject:title]){
NSInteger计数=0;
for(self.realMIndexArray中的NSString*字符)
{
if([字符IsequalString:title]){
返回计数;
}
计数++;
}
}
否则{
//从字母表中选取下一个较高的字母,并检查其是否包含在“可用字母列表”中
//如果没有,请选择列表的最后一项
for(int i=[self.indexArray indexOfObject:title]+1;i<[self.indexArray count];i++){
NSString*字符=[self.indexArray objectAtIndex:i];
if([self.realMIndexArray containsObject:character]){
返回[self.realmindexorray indexOfObject:character];
}
}
返回[self.realMIndexArray count]-1;
}
返回0;//如果某个eror donot使d应用程序崩溃
}
}
realMIndexArray count==列表中实际存在的字母
indexArray=alphbeth中所有字母的列表
希望这对某人有所帮助(我花了一点时间才弄明白)我理解了你的第一点,但为什么单击索引会将我带到正确的部分呢。是的,我正在实现UITableViewStylePlain。您刚才问我“为什么点击(而不是“单击”)索引会将用户带到正确的部分?”。。。因为这就是它应该做的。(我想你不是有意问我这个问题。请重新措辞。)你是对的。我相信这种行为是由tableView:sectionForSectionIndexTitle实现的
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
}