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ù)器!"?)
? ? ? ? ? ? }
? ? ? ? }
? ? }
}