为一个表视图建立索引的规则与在数据库表中建立索引的规则是类似的,但也有一定差别。对于图1所示的表,索引列中的索引标题几乎与显示的标题完全一样,这种情况下我们还需要索引吗?该表的另一个问题就是索引列与扩展视图发生了冲突,当你点击索引列时,往往会点击到扩展视图的图标。索引列表的正确使用方式应该像英文字典的索引一样,A字母代表A开头的所有单词,如图2所示。
索引的正确使用原则如下所示。
1、索引标题不能与显示的标题完全一样。如果与要显示的标题一致,索引就变得毫无意义,如图1所示。
2、索引标题应具有代表性,能代表一个数据集合。如图2所示,索引标题A下有一系列符合要求的数据。
3、如果采用了索引列表视图,一般情况下就不再使用扩展视图。索引列表视图与扩展视图并存的时候,两者会存在冲突。当点击索引标题时,很容易点击到扩展视图。
接下来,我们通过一个案例来演示正确使用索引的方式。
使用Single View Application模板创建一个名为IndexTable的工程。为了方便,我们将数据放到team_dictionary.plist文件中,具体如图3所示。
下面百恒网络再带大家看看视图控制器ViewController的定义和属性,以及视图加载方法viewDidLoad的相关代码:
属性dictData用来从属性列表文件team_dictionary.plist中读取字典类型数据,属性listGroupname保存了小组名的集合,是从dictData属性中取出的,它是dictData的键的集合。
第①行代码用于从字典中取出来所有键,它的顺序是混乱状态(D组,C组,B组,H组,A组,G组,F组,E组),这是因为它是哈希结构,内部结构是无序的,我们需要使用第②行代码对其重新进行排序,排序比较方法是compare:。
此外,我们还需要修改数据源方法tableView:numberOfRowsInSection:和tableView:cellForRowAtIndexPath:,具体代码如下所示:
在表视图分节时,需要实现数据源中的numberOfSectionsInTableView:和tableView:titleForHeaderInSection:方法,具体实现代码如下:
上面这几个方法已实现了分节。分节只是添加索引的前提,数据源的sectionIndexTitlesForTableView:方法才与索引直接相关。我们在该方法的listGroupname集合中存放的数据是A组, B组, C组, D组, E组, F组, G组, H组,这些数据在索引列中显示的结果是A,B,C,D,E,F,G,H,将后面的“组”字符截取掉:
此时再看看运行结果。
关于IOS中添加索引的方法就先介绍到这里,如果还有哪些不清楚的地方,可随时来电咨询,本公司专业从事南昌APP开发,一定可以为您解答疑惑!