添加索引只需实现两个代理方法
/// 添加右侧索引
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
return sortedKeys
}
/// 索引值与列表关联点击事件
func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
return index
}
举例:
import Foundation
import SwiftyJSON
struct LocationListModel : BaseModel {
typealias Element = LocationListModel
var key: String = ""
var list: [LocationItemModel] = []
}
var sortedKeys: [String] = []
var listArr: [LocationListModel] = []
extension LocationListVC: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return listArr.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listArr[section].list.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: LocationListCell.className, for: indexPath) as! LocationListCell
cell.selectionStyle = .none
let list = listArr[indexPath.section].list
cell.data = list[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view : LocationHeaderView = Bundle.main.loadNibNamed("LocationHeaderView", owner: nil, options: nil)![0] as! LocationHeaderView
view.titleLab.text = listArr[section].key
return view
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 40.0
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
/// 添加右侧索引
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
return sortedKeys
}
/// 索引值与列表关联点击事件
func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
self.view.endEditing(true)
return index
}
}
示意图: