Swift城市列表---按字母排序分組

話不多說直接添代碼

//
//  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
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0x01.引言 最近在整一個(gè)通訊錄相關(guān)的項(xiàng)目,通訊錄當(dāng)然就少不了按首字母或者漢字拼音首字母分組排序索引。因?yàn)榘凑瘴?..
    云天大俠_general閱讀 1,133評(píng)論 0 4
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評(píng)論 25 709
  • 看了《芳華》這本書,沒有自己預(yù)想的流下熱淚,但是書中的情節(jié)卻一直縈繞于腦海中,久久無法釋懷。 劉峰,時(shí)代的好人,或...
    心靈的訪客閱讀 182評(píng)論 0 0
  • 我們的作品名稱是健康飲食規(guī)劃系統(tǒng),服務(wù)的提供形式是通過APP.食物的熱量等一些營養(yǎng)數(shù)據(jù)來源于薄荷網(wǎng),我們只爬取了薄...
    yougar閱讀 279評(píng)論 0 0
  • 突然發(fā)現(xiàn)寫作時(shí)最常出現(xiàn)的詞是"我"和"自己",當(dāng)然,覺得自己好自戀。哈哈 其實(shí)不是,當(dāng)興趣點(diǎn)往內(nèi)時(shí),往往是探索自己...
    Echo_1999閱讀 162評(píng)論 4 2

友情鏈接更多精彩內(nèi)容