? ? ? ?為一個表視圖建立索引的規則與在數據庫表中建立索引的規則是類似的,但也有一定差別。對于圖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開發,一定可以為您解答疑惑!