如何根据声明顺序对UITableView标头进行排序

时间:2013-11-15 03:38:21

标签: ios objective-c uitableview

所以我在这里遇到一些问题,我想我在这篇文章的标题中明确指出了这一点。我想根据我在代码中声明它们的顺序对UITableView标题进行排序。我已经尝试上网但我找不到任何解决方案。

我认为从这里可以提供帮助。提前谢谢!

编辑:这是表视图内容的代码

 NSDictionary *temp = [[NSDictionary alloc]initWithObjectsAndKeys:accSettingsOpts, @"Account",notifSettingsOpts,@"Notifications",aboutOpts,@"About",logoutOpt,@"Sign Out",nil];

我想显示按

排序的表格视图
-Account
-Notifications
-About
-Sign Out

但它显示为

 -About
 -Account
 -Notifications
 -Sign Out

编辑:这就是解决问题的方法。

根据我在下面接受的答案,我将其修改为

@interface myClass ()
NSArray *headerArr;
@end

viewDidload我添加了

headerArr = [[NSArray alloc]initWithObjects:@"Account",@"Notifications",@"About",@"Sign Out", nil];

最后......

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return [headerArr objectAtIndex:section];
}

感谢帮助人员。我没想到它只是那么简单。

2 个答案:

答案 0 :(得分:2)

字典是无序集合。如果将项目存储在字典中,则定义它们的顺序不会保存在任何位置。

表视图是一个固有有序的对象列表。因此,字典不适合作为存储表视图的项目的方式。但是,数组为表视图提供了自然数据源。

使用数组而不是字典。就这么简单。您可以使用字典数组或一些其他数据对象的数组,然后编写cellForRowAtIndexPath方法以从模型中提取数据(数组元素)并在单元格中安装值。

答案 1 :(得分:2)

订单与声明顺序不同的原因是NSDictionary是无序的:它是根据字符串的哈希码排序的,这是相当随意的。

要强制执行特定订单,请使用具有固定订单的容器,例如NSArray。例如,您可以将accSettingsOptsnotifSettingsOpts等存储在一个数组中,将header属性添加到Opts类,并将该属性拉到在UITableView

中设置标题标题