自定義tableview索引,字母搜索

class?UserViewController:?UIViewController?,UITableViewDelegate,?UITableViewDataSource{


?var?tableView:UITableView?

?var?nameArray : [String] = []

?var?charArr : [String] = []

?var?adHeaders : [String] = []

?var?addressBookDict = [String:[PPPersonModel]]()


?override?func?viewDidLoad() {

?super.viewDidLoad()

?view.backgroundColor?=?UIColor.white

?loadDate_table()


?for?i?in?0..

?let?model :?PPPersonModel?=?PPPersonModel()

model.name?=?nameArray[i]

?// 獲取到姓名的大寫(xiě)首字母

?let?firstLetterString =?getFirstLetterFromString(aString: model.name)

?if?addressBookDict[firstLetterString] !=?nil?{

?// swift的字典,如果對(duì)應(yīng)的key在字典中沒(méi)有,則會(huì)新增

?addressBookDict[firstLetterString]?.append(model)

}?else?{

?let?arrGroupNames = [model]

?addressBookDict[firstLetterString] = arrGroupNames

? ? ? ? ? ? }

? ? ? ? }

?var?nameKeys =?Array(addressBookDict.keys).sorted()

?// 將 "#" 排列在 A~Z 的后面

?if?nameKeys.first?==?"#"?{

nameKeys.insert(nameKeys.first!, at: nameKeys.count)

nameKeys.remove(at:?0);

? ? ? ? }

?adHeaders?+=?adHeaders+nameKeys

?print("111111","\(nameKeys) ")

?print("adHeaders",adHeaders)


?for?i?in?0..

?let?key = nameKeys[i]

?letmodelArr =?addressBookDict[key]

?letcount = modelArr!.count

?for?j?in?0..

?letmodel:PPPersonModel?= modelArr![j]

?charArr.append(model.name)

? ? ? ? ? ? }

? ? ? ? }

?print("333333",charArr)

?//創(chuàng)建表視圖

?self.tableView?=?UITableView(frame:UIScreen.main.applicationFrame,style:.grouped)

?self.tableView!.delegate?=?self

?self.tableView!.dataSource?=?self

?//創(chuàng)建一個(gè)重用的單元格

?self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier:?"SwiftCell")

?self.view.addSubview(self.tableView!)


? ? }

?// MARK: - 獲取聯(lián)系人姓名首字母(傳入漢字字符串, 返回大寫(xiě)拼音首字母)

?func?getFirstLetterFromString(aString:?String) -> (String) {

?// 注意,這里一定要轉(zhuǎn)換成可變字符串

?let?mutableString =?NSMutableString.init(string: aString)

?// 將中文轉(zhuǎn)換成帶聲調(diào)的拼音

?CFStringTransform(mutableString?as?CFMutableString,?nil,?kCFStringTransformToLatin,?false)

?// 去掉聲調(diào)(用此方法大大提高遍歷的速度)

?let?pinyinString = mutableString.folding(options:?String.CompareOptions.diacriticInsensitive, locale:?NSLocale.current)

?// 將拼音首字母裝換成大寫(xiě)

?let?strPinYin =?polyphoneStringHandle(nameString: aString, pinyinString: pinyinString).uppercased()

?// 截取大寫(xiě)首字母

?let?firstString = strPinYin.substring(to: strPinYin.index(strPinYin.startIndex, offsetBy:1))

?// 判斷姓名首位是否為大寫(xiě)字母

?let?regexA =?"^[A-Z]$"

?let?predA =?NSPredicate.init(format:?"SELF MATCHES %@", regexA)

?return?predA.evaluate(with: firstString) ? firstString :?"#"

? ? }

?/// 多音字處理

?func?polyphoneStringHandle(nameString:String, pinyinString:String) ->?String?{

?if?nameString.hasPrefix("長(zhǎng)") {return?"chang"}

?if?nameString.hasPrefix("沈") {return?"shen"}

?if?nameString.hasPrefix("廈") {return?"xia"}

?if?nameString.hasPrefix("地") {return?"di"}

?if?nameString.hasPrefix("重") {return?"chong"}


?return?pinyinString;

? ? }


?func?numberOfSections(in tableView:?UITableView) ->?Int?{

?return?adHeaders.count

? ? }


?func?tableView(_?tableView:?UITableView, numberOfRowsInSection section:?Int) ->?Int?{


?let?key =?adHeaders[section]

?let?array =?addressBookDict[key]


?return?(array?.count)!

? ? }


?func?tableView(_?tableView:?UITableView, titleForHeaderInSection section:?Int) ->?String? {

?return?adHeaders[section]

? ? }


?// 右側(cè)索引

?func?sectionIndexTitles(for tableView:?UITableView) -> [String]? {

?return?adHeaders

? ? }


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

?var?cell = tableView.dequeueReusableCell(withIdentifier:?"cell")

?if?cell ==?nil?{


cell =?UITableViewCell.init(style:?UITableViewCellStyle.default, reuseIdentifier:?"cell")

? ? ? ? }

?let?modelArray =?addressBookDict[adHeaders[indexPath.section]]

?let?model = modelArray![indexPath.row]

cell?.textLabel?.text?= model.name


?return?cell!

? ? }


?func?tableView(_?tableView:?UITableView, didSelectRowAt indexPath:?IndexPath) {


?let?modelArray =?addressBookDict[adHeaders[indexPath.section]]

?let?model = modelArray![indexPath.row]


?let?alertViewVC =?UIAlertController.init(title: model.name, message:"", preferredStyle:UIAlertControllerStyle.alert)//message:"\(model.mobileArray)"

?let?confirm =?UIAlertAction.init(title:?"確定", style:?UIAlertActionStyle.cancel, handler:nil)

alertViewVC.addAction(confirm)

?self.present(alertViewVC, animated:?true, completion:?nil)


? ? }

?func?loadDate_table() {

?let?parameters:?Parameters?= [

?"action":?"getUser",

?"account":ServerManager.account

? ? ? ? ]


?let?url =?ServerManager.getURL2(parameters: parameters)

?print(url)

Alamofire.request(url).validate().responseJSON?{ (response)?in

?//print(response)

?switch?response.result?{

?case?.success(let?value):

?let?json =?JSON(value)

?// print("JSON: \(json)")

?let?count = json.count

?//print("count",count)

?if?count >?0?{

?for?i?in?0..

?self.nameArray.append(json["account"].string!)//

?print("nameArray",self.nameArray)

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

?case?.failure(let?error):

?AlertUtil.alert(message: error?as??String????"請(qǐng)求超時(shí),連接不上服務(wù)器!"?)

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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