实现多节 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 的最佳实践是啥的主要内容,如果未能解决你的问题,请参考以下文章

为只读结构实现相等的最佳实践是啥? [关闭]

使用视图模型中的属性值实现方法的最佳实践是啥?

CSS3 - 性能最佳实践是啥? [关闭]

WebSocket 服务器的最佳实践是啥?

编写可维护的网络爬虫的最佳实践是啥?

使用 GUI 制作 COM 服务器的最佳实践是啥?