UILocalizedIndexedCollation 实现通讯录或地区分组

之前项目里有根据地名分组点击跳转的需求,就跟通讯录差不多。在百度到一些他人的成果后找到了通过原生的 UILocalizedIndexedCollation 实现的方式。代码如下:

class Person: NSObject {

    @objc var name: String?
}

class ViewController: UITableViewController {

    /// 数据源
    private var dataArray = [[Person]]()
    /// 每个 section 的标题
    private var sectionTitleArray = [String]()
    
    private var indexedCollation = UILocalizedIndexedCollation.current()

    override func viewDidLoad() {
        super.viewDidLoad()

        let nameArray = ["赵", "钱", "孙", "李", "周", "孙", "李", "周", "孙", "李", "周", "吴", "郑", "王", "郭", "松", "宋", "长", "大", "小"]
        var personArray = [Person]()
        for name in nameArray {
            let p = Person()
            p.name = name
            personArray.append(p)
        }

        // 获得索引数, 这里是27个(26个字母和1个#)
        let indexCount = indexedCollation.sectionTitles.count

        // 每一个一维数组可能有多个数据要添加,所以只能先创建一维数组,到时直接取来用
        for _ in 0.. Int {
        return sectionTitleArray.count
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataArray[section].count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let id = "cell"
        var cell = tableView.dequeueReusableCell(withIdentifier: id)
        if cell == nil {
            cell = UITableViewCell(style: .default, reuseIdentifier: id)
        }
        cell?.textLabel?.text = dataArray[indexPath.section][indexPath.row].name
        return cell!
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return sectionTitleArray[section]
    }

    /// 这是右侧可以点击跳转的控件 title
    override func sectionIndexTitles(for tableView: UITableView) -> [String]? {
        return sectionTitleArray
    }
}

项目地址:https://github.com/yljbyj/UILocalizedIndexedCollation.git

参考文章:

iOS UILocalizedIndexedCollation排序神器

swift3.0 实现中文拼音索引

你可能感兴趣的:(UILocalizedIndexedCollation 实现通讯录或地区分组)