使用系统自带的索引即可,方法如下:
// MARK: 右侧索引
// 索引的个数
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// self.getAllCityKey()这是我自己工程里面获取所有索引数据的方法,可以忽略,使用你自己的方法即可
return self.getAllCityKey().count
}
// 返回的索引内容,好像这个方法并没有执行
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let keys = self.getAllCityKey()
let keyStr = keys[section]
let keyStrBig = (keyStr as AnyObject).uppercased
return keyStrBig
}
// 返回的索引内容,这个方法应该是真的,因为我的索引内容是a-z的小写字母,所以下面使用了小写转大写的方法
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
let keys = self.getAllCityKey()
var array = [String]()
for keyStr in keys {
guard let keyStrBig = (keyStr as AnyObject).uppercased else { return [String]() }
array.append(keyStrBig)
}
return array
}
// 这个代理方法触发点击和滚动索引栏的作用
func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
return index
}
// 这个代理方法是用来修改索引栏字体大小的方法
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
setTableViewIndexFont(UIFont.systemFont(ofSize: 17))
}
// 修改索引栏字体大小
func setTableViewIndexFont(_ font:UIFont) {
for view in tableView?.subviews ?? [UIView()] {
if view.isKind(of: NSClassFromString("UITableViewIndex")!) {
let selector = #selector(setter: CATextLayer.font)
if view.responds(to: selector) {
view.perform(selector, with: font)
view.bounds = CGRect(x: 0, y: 0, width: 30, height: 30)
}
}
}
}
如果修改索引栏字体颜色,索引栏背景颜色,索引栏选中之后的背景颜色,可以使用tableView的属性修改
tableView?.sectionIndexColor = UIColor.orange
tableView?.sectionIndexBackgroundColor = UIColor.red
tableView?.sectionIndexTrackingBackgroundColor = UIColor.blue
网友评论