2012-02-03 195 views
0

全部,什么是实现多部分TableView的最佳实践

我有大约3000个词的定义,我正在加载到一个TableView中。现在,这只是一个排序的单词列表,没有添加它们。

Table View without Sections

我需要的部分添加到我的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]; 
0

我发现你有时想将排序添加到你的列表中,然后,另一种方法可能会很有趣。把你的所有模型(你的例子中的Word)放在一个字典中,并将模型的一些独特值作为关键字。

实现一种排序方法,每次底层字典更改时都会运行。分类方法将使用例如keysSortedByValueUsingComparator放在字典中,并为不同的排序顺序提供不同的块。让排序方法创建节数组并添加与字典中的键相对应的数组中的键。

你不存储任何两次,您只需提供不同种类的块(可以看看你的模型类的任何属性)获得不同的排序顺序。