实现多节 TableView 的最佳实践是啥
Posted
技术标签:
【中文标题】实现多节 TableView 的最佳实践是啥【英文标题】:What's the Best Practice for Implementing Multi-section TableView实现多节 TableView 的最佳实践是什么 【发布时间】:2012-02-03 21:37:49 【问题描述】:全部,
我有大约 3000 个单词的定义要加载到 TableView 中。现在,它只是一个排序的单词列表,没有部分,因为我还没有添加它们。
我需要在我的 TableView 数据中添加部分(A、B、C ...),并且似乎有几种方法可以做到这一点,所以在我开始之前,我正在寻找一些确认或更正,如果我要去的话掉错了兔子洞。
目前,TableView 读取的数据按照以下代码作为对象存储在 NSMutableArray 中:
//AppDelegate.m
- (void)applicationDidFinishLaunching:(UIApplication *)application
//...
NSMutableArray *wordArray = [[NSMutableArray alloc] init];
//Loop through result set from DB and populate objects
while([rs next])
[wordArray addObject:[Word wordWith:[rs stringForColumn:@"word"]
Definition:[rs stringForColumn:@"definition"]
SectionIndex:[rs stringForColumn:@"sectionIndex"]]];
MainViewController *mainViewController =
[[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
mainViewController.listContent = wordArray;
//...
每个对象都有一个部分索引值([A-Z0-9]),所以我已经知道每个单词进入哪个部分,我知道这些部分需要是什么,并且我可以很容易地得出每个部分的对象数量.在填充 NSMutableArray 之前,所有单词都已通过 SQL 排序,因此已经处理完毕。
我可以使用一个 NSMutableArray 创建多个部分还是需要做一些不同的事情?
谢谢
【问题讨论】:
【参考方案1】:您可以将单词存储到 NSDictionary 中的数组中,其中包含每个字母的键。
将返回的部分数
[[dictionary allKeys] count];
章节标题
NSArray * keys = [dictionary allKeys];
[keys objectAtIndex:sectionIdx]
节中的行数将返回
NSArray * keys = [dictionary allKeys];
[(NSArray *)[dictionary objectForKey:[keys objectAtIndex:sectionIdx]] count];
每个单词都是
NSArray * keys = [dictionary allKeys];
[(NSArray *)[dictionary objectForKey:[keys objectAtIndex:sectionIdx]] objectAtIndex:indexPath.row];
【讨论】:
【参考方案2】:我发现您有时想在列表中添加排序,然后,另一种方法可能会很有趣。将所有模型(示例中的 Word)放入字典中,并以模型的某些唯一值作为键。
实现一种排序方法,每次底层字典更改时都会运行该方法。排序方法将使用例如字典上的 keysSortedByValueUsingComparator 并为不同的排序顺序提供不同的块。让排序方法创建节数组,并在数组中添加与字典中的键对应的键。
您不会存储任何东西两次,只需提供不同的排序块(可以查看模型类的任何属性),就可以获得不同的排序顺序。
【讨论】:
以上是关于实现多节 TableView 的最佳实践是啥的主要内容,如果未能解决你的问题,请参考以下文章