話不多說直接添代碼
//
// MLSelectCityViewController.swift
// zhongXiang_Swift
//
// Created by 瑪麗 on 2018/3/12.
// Copyright ? 2018年 瑪麗. All rights reserved.
//
import UIKit
import ObjectMapper
import RealmSwift
class MLSelectCityViewController: MLBaseViewController {
func requestData() {
MLHttpTool.getAllCityList(parameters: nil) { (response) in
let modelArr = Mapper<MLCityModel>().mapArray(JSONObject: response)
guard modelArr?.count != 0 else {
return
}
for model in modelArr! {
model.letter = self.getFirCharactor(str: model.name!)
}
self.dataArray.setArray(modelArr!)
//首字母升序排列
self.getAllCityMetter()
self.tableView.reloadData()
}
}
//獲得所有的key值并排序,并返回排好序的數(shù)組
func getAllCityKey()->NSArray{
let keys = metterDict.allKeys as NSArray
return keys.sortedArray(using: #selector(NSNumber.compare(_:))) as NSArray
}
//首字母相同的放在一起
func getAllCityMetter(){
for cityInfo in self.dataArray {
let info = cityInfo as! MLCityModel
let s = metterDict[info.letter ?? ""]
if s == nil {
var letterArr: NSMutableArray
letterArr = NSMutableArray()
metterDict.setObject(letterArr, forKey: info.letter! as NSCopying)
letterArr.add(info)
}else{
let m_letterArr = metterDict[info.letter ?? ""] as! NSMutableArray
m_letterArr.add(info)
}
}
}
func getFirCharactor(str: String) -> String {
let mString = NSMutableString(string: str)
CFStringTransform(mString, nil, kCFStringTransformToLatin, false)
CFStringTransform(mString, nil, kCFStringTransformStripDiacritics, false)
let string = mString.capitalized
return string.substring(to: string.index(string.startIndex, offsetBy: 1))
}
}
extension MLSelectCityViewController: UITableViewDataSource, UITableViewDelegate
{
func numberOfSections(in tableView: UITableView) -> Int {
let keys = self.getAllCityKey()
return keys.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let keys = self.getAllCityKey()
let keyStr = keys[section]
let values = metterDict.object(forKey: keyStr)
return ((values as AnyObject).count)!
}
//索引代理
func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
let keys = self.getAllCityKey() as! [String]
return keys
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let keys = self.getAllCityKey() as! [String]
//判斷keys是否為空
if keys.count > 0 {
return keys[section]
}else{
return nil
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let keys = self.getAllCityKey()//所有的key值
let keyStr = keys[indexPath.section]//選擇的是哪一組
let values = metterDict.object(forKey: keyStr) as! NSArray//獲取該組下面的所有行
let info = values[indexPath.row] as! MLCityModel//獲取選中的行
cell.textLabel?.text = info.name
cell.textLabel?.font = UIFont.systemFont(ofSize: 14)
return cell
}
}