如何使用NSArrays的NSDictionary设置TableView的titleForHeaderInSection和numberOfRowsInSection?

时间:2014-04-24 18:09:01

标签: ios objective-c uitableview nsarray nsdictionary

我有一个带有NSArrays名称的NSDictionary,所以自然总共有26个数组。我想将titleForHeaderInSection(A,B,C等)设置为数组的键,将numberOfRowsInSection设置为数组的计数。我可以通过用块枚举它们来获取每个数组的计数,但是如何基于我拥有的NSDictionary在TableView上设置这两个选项?有没有办法订购NSDictionary,所以结果是按字母顺序排列的?

这是我的NSDictionary:

@{
    @"A" :  
        @[@"Person One", @"Person Two", @"Person Three"],
    @"B" :
        @[@"Person One", @"Person Two", @"Person Three", @"Person Four"],
    @"C" :
        @[@"Person One", @"Person Two"],
}
// etc

这是NSDictionary的NSLog:标题是否会无序?

A -- 23
B -- 78
G => 27
U => 1
H => 57
V => 6
I => 1
// etc

1 个答案:

答案 0 :(得分:4)

字典中的条目未订购。你可以做的是创建一个数组 所有部分标题和按字母顺序排序:

NSDictionary *dict = ...; // your dictionary
NSArray *sectionTitles = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];

然后部分的数量是

[sectionTitles count]

对于给定的节号,标题和行数可以计算为

NSString *title = sectionTitles[section];
NSUInteger numRows = [dict[sectionTitles[section]] count];

最后,对于给定的索引路径,相应的项目是

NSString *item = dict[sectionTitles[indexPath.section]][indexPath.row];