城市列表

2019-11-10  本文已影响0人  阿龍飛

//
//  BLSelectCityViewController.swift
//  bestnewkjb
//
//  Created by  on 2019/7/11.
//  Copyright © 2019 . All rights reserved.
//

import UIKit

import Alamofire
import SwiftyJSON

class BLOrderCommentsCompleteVC: LLFBaseViewController ,UITableViewDataSource , UITableViewDelegate {
    
    @objc var touchTitleView: (_ titleStr:String) -> Void = {_ in }
    
    @IBOutlet weak var currentLocationLabel: UILabel!
    
    @IBOutlet weak var topView: UIView!
    
    @IBOutlet weak var tableView: UITableView!
    
    
    //数据源
    var dataArray = NSMutableArray()
    
    
    let citys = ["北京市", "上海市", "天津市", "长沙", "重庆市", "合肥市", "毫州市", "芜湖市", "马鞍山市", "池州市", "黄山市", "滁州市", "安庆市", "淮南市", "淮北市", "蚌埠市", "巢湖市", "宿州市", "六安市", "阜阳市", "铜陵市", "明光市", "天长市", "宁国市", "界首市", "桐城市", "广州市", "韶关市", "深圳市", "珠海市", "汕头市", "佛山市", "江门市", "湛江市", "茂名市", "肇庆市", "惠州市", "梅州市", "汕尾市", "河源市", "阳江市", "清远市", "东莞市", "中山市", "潮州市", "揭阳市", "云浮市", "昆明市", "曲靖市", "玉溪市", "保山市", "昭通市", "丽江市", "思茅市", "临沧市", "楚雄彝族自治州", "红河哈尼族彝族自治州", "文山壮族苗族自治州", "西双版纳傣族自治州", "大理白族自治州", "德宏傣族景颇族自治州", "怒江傈僳族自治州", "迪庆藏族自治州"]
    
    //分别用来存储分组好的城市和每个组的标题,cityGroups变量是一个字典,每个key都是城市名的第一个字母,对应的值是以这个key开头的城市
    var cityGroups = [String: [String]]()
    var groupTitles = [String]()
    
    //MARK: - private methods
    
    // MARK: - 获取首字母(传入汉字字符串, 返回大写拼音首字母)
    func getFirstLetterFromString(aString: String) -> (String) {
        let mutableString = NSMutableString.init(string: aString)
        CFStringTransform(mutableString as CFMutableString, nil, kCFStringTransformToLatin, false)
        let pinyinString = mutableString.folding(options: String.CompareOptions.diacriticInsensitive, locale: NSLocale.current)
        let strPinYin = polyphoneStringHandle(string: aString, pinyinString: pinyinString).uppercased()
        let firstString = strPinYin.prefix(1)
        let regexA = "^[A-Z]$"
        let predA = NSPredicate.init(format: "SELF MATCHES %@", regexA)
        return predA.evaluate(with: firstString) ? String(firstString) : "#"
    }
    
    // 多音字处理
    func polyphoneStringHandle(string:String, pinyinString:String) -> String {
        if string.hasPrefix("长") {return "chang"}
        if string.hasPrefix("沈") {return "shen"}
        if string.hasPrefix("厦") {return "xia"}
        if string.hasPrefix("地") {return "di"}
        if string.hasPrefix("重") {return "chong"}
        return pinyinString;
    }
    
    
    //MARK:- 按照城市字母顺序排序
    
    func makeCityToGroup() {
        // 遍历citys数组中的所有城市
        for city in citys {
            
            // 拿到首字母作为key
            let firstLetter = getFirstLetterFromString(aString: city as String)
            
            // 检查是否有firstLetter对应的分组存在, 有的话直接把city添加到对应的分组中
            // 没有的话, 新建一个以firstLetter为key的分组
            if var value = cityGroups[firstLetter] {
                value.append(city)
                cityGroups[firstLetter] = value
            }
            else {
                cityGroups[firstLetter] = [city]
            }
        }
        
        //拿到所有的key将它排序, 作为每个组的标题
        groupTitles = cityGroups.keys.sorted()
    }
    
    //MARK: - Life Cycle
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.title = "城市选择"
  
        //拿到数据源
        self .makeCityToGroup()
        
        tableView.sectionIndexColor = UIColor.black  //索引字体颜色
        tableView.sectionIndexBackgroundColor = UIColor.clear
        tableView.delegate = self
        tableView.dataSource = self
        tableView.register(UINib.init(nibName: "BLSelectCityCell", bundle: nil), forCellReuseIdentifier: "BLSelectCityCell")

    }
    
    deinit {
        print(#file,"----------------------------------销毁了")
    }

    //MARK: - UITableViewDataSource
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return self.cityGroups.count
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let firstLetter = groupTitles[section]
        return cityGroups[firstLetter]!.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell:BLSelectCityCell = tableView.dequeueReusableCell(withIdentifier: "BLSelectCityCell", for: indexPath) as! BLSelectCityCell
        
        let firstLetter = groupTitles[indexPath.section]
        let citysInAGroup = cityGroups[firstLetter]!
        cell.cityLabel.text = citysInAGroup[indexPath.row]
        
        return cell
    }
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return groupTitles[section]
    }
    
    func sectionIndexTitles(for tableView: UITableView) -> [String]? {
        return groupTitles
    }
    
    //MARK: - UITableViewDelegate
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        
        self.touchTitleView("梅州")
        
        self.navigationController?.popViewController(animated: true)
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 50
    }
    
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 50
    }
    
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 0.01
    }
    
}

上一篇下一篇

猜你喜欢

热点阅读