【发布时间】:2010-10-29 10:32:33
【问题描述】:
我正在创建一个应用程序来解析巨大的 xml 文件并将数据获取到表视图中。用户可以在搜索栏中输入文本来搜索表格视图。
现在,我想将表格视图变成按字母组合的分段视图。由于表格视图很大并且包含搜索功能,我想知道如何将表格视图分成多个部分......任何教程或资源都会有很大帮助......
【问题讨论】:
标签: iphone uitableview ios4
我正在创建一个应用程序来解析巨大的 xml 文件并将数据获取到表视图中。用户可以在搜索栏中输入文本来搜索表格视图。
现在,我想将表格视图变成按字母组合的分段视图。由于表格视图很大并且包含搜索功能,我想知道如何将表格视图分成多个部分......任何教程或资源都会有很大帮助......
【问题讨论】:
标签: iphone uitableview ios4
您必须使用配置为节索引的表视图
见Table View Programming Guide for iOS
[...]索引列表是一个普通样式的表格视图,通过三个 UITableViewDataSource 方法专门配置:
sectionIndexTitlesForTableView:tableView:titleForHeaderInSection:tableView:sectionForSectionIndexTitle:atIndex:第一个方法返回一个字符串数组用作索引条目(按顺序),第二个方法将这些索引字符串映射到表视图部分的标题(它们不必相同) ,第三个方法返回与用户在索引中点击的条目相关的部分索引。
应组织用于填充索引列表的数据以反映此索引模型。具体来说,您需要构建一个数组数组。每个内部数组对应表中的一个部分;部分数组根据流行的排序方案在外部数组中进行排序(或整理),这通常是按字母顺序排列的方案(例如,A 到 Z)。此外,对每个部分数组中的项目进行排序。您可以自己构建和排序这个数组数组,但幸运的是 UILocalizedIndexedCollation 类使构建和排序这些数据结构以及向表视图提供数据的任务变得更加容易。该类还根据当前本地化整理数组中的项目。
【讨论】:
您可以在https://github.com/shreeshgarg/sectiontable获取示例项目
首先,您必须使用 NSSortDescriptor 对数据进行排序,然后创建一个字典,其中键是数据的第一个字母,每个键应该有一个从同一个字母开始的记录数组。
你可以这样做
-(NSMutableDictionary *)fillingDictionary:(NSMutableArray *)ary
{
// This method has the real magic of this sample
// ary is the unsorted array
// keyArray should be global as you need to access it outside of this function
keyArray=[[NSMutableArray alloc]init];
[keyArray removeAllObjects];
NSMutableDictionary *dic=[[NSMutableDictionary alloc]init];
// First sort the array
[ary sortUsingSelector:@selector(compare:)];
// Get the first character of your string which will be your key
for(NSString *str in ary)
{
char charval=[str characterAtIndex:0];
NSString *charStr=[NSString stringWithUTF8String:&charval];
if(![keyArray containsObject:charStr])
{
NSMutableArray *charArray=[[NSMutableArray alloc]init];
[charArray addObject:str];
[keyArray addObject:charStr];
[dic setValue:charArray forKey:charStr];
}
else
{
NSMutableArray *prevArray=(NSMutableArray *)[dic valueForKey:charStr];
[prevArray addObject:str];
[dic setValue:prevArray forKey:charStr];
}
}
return dic;
}
【讨论】: