UITableView基礎[ 5 ] 右側索引的實現

weixin_33807284發表於2015-10-17

介紹

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!)
    }
}

相關文章