介紹
UITableView中有一個非常好用的功能:索引,通過索引我們可以對Cell進行快速的查詢,讓整個表格變的更有條理,這裡我們來實現一下類似通訊錄的索引功能
實現
首先我們定義一個陣列用於儲存Section
var sectionArray:[String]?
實現UITableView有關索引的部分代理方法
numberOfSectionsInTableView為索引的數量
titleForHeaderInSection獲取具體Section的標題
sectionIndexTitlesForTableView獲取儲存索引的陣列
//索引數量
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
if sectionArray == nil{
return 0
}
return sectionArray!.count
}
//Section的標題
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sectionArray![section]
}
//獲取儲存索引的陣列
func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
if sectionArray == nil{
return nil
}
return sectionArray!
}
實現了這幾個代理方法後,理論上就可以顯示出索引了
實現索引陣列的自動更新
索引陣列應該隨著資料陣列的改變而改變
設計通過資料陣列返回索引陣列的函式
/**
根據UITableView Data陣列尋找索引並新增進索引陣列
- parameter DataArray: UITableView資料陣列
- returns: 索引陣列
*/
func searchForSection(DataArray:[item])->[String]{
var stringDataArray = [String]()
for var i=0;i<DataArray.count;++i{
stringDataArray.append(DataArray[i].Name!)
}
var array=[String]()
for str in stringDataArray{
//查重,避免新增錯誤的索引
var flag = false
for existSection in array{
if String(str[str.startIndex]) == existSection {
flag = true
}
}
if flag == false{
array.append(String(str[str.startIndex]))
}
}
return array
}
有了這段程式碼我們就可以根據資料陣列生成索引陣列了
隨後我們將索引陣列的更新放進資料陣列的屬性的didSet方法,這樣實現了索引陣列的隨時更新
var infoArray:[item]?{
didSet{
sectionArray = searchForSection(infoArray!)
}
}