日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swift之实现表格UITableView数据首字母顺序排列展示并添加“索引”快速定位查找功能

發布時間:2024/5/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift之实现表格UITableView数据首字母顺序排列展示并添加“索引”快速定位查找功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

整理數據

  • 獲取漢字拼音的首字母
/**獲取漢字拼音的首字母, 返回的字母是大寫形式, 例如: @"俺妹", 返回 @"A".*如果字符串開頭不是漢字, 而是字母, 則直接返回該字母, 例如: @"b美女", 返回 @"B".*如果字符串開頭不是漢字和字母, 則直接返回 @"#", 例如: @"&哈哈", 返回 @"#".*字符串開頭有特殊字符(空格,換行)不影響判定, 例如@" a啦啦啦", 返回 @"A".*/- (NSString *)getFirstLetter {NSString *words = [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];if (words.length == 0) {return nil;}NSString *result = nil;unichar firstLetter = [words characterAtIndex:0];int index = firstLetter - HANZI_START;if (index >= 0 && index <= HANZI_COUNT) {result = [NSString stringWithFormat:@"%c", firstLetterArray[index]];} else if ((firstLetter >= 'a' && firstLetter <= 'z')|| (firstLetter >= 'A' && firstLetter <= 'Z')) {result = [NSString stringWithFormat:@"%c", firstLetter];} else {result = @"#";}return [result uppercaseString]; }
  • 將一個字符串數組按照拼音首字母規則進行重組排序, 返回重組后的數組
/**將一個字符串數組按照拼音首字母規則進行重組排序, 返回重組后的數組.*格式和規則為:[@{@"firstLetter": @"A",@"content": @[@"啊", @"阿貍"]},@{@"firstLetter": @"B",@"content": @[@"部落", @"幫派"]},...]*只會出現有對應元素的字母字典, 例如: 如果沒有對應 @"C"的字符串出現, 則數組內也不會出現 @"C"的字典.*數組內字典的順序按照26個字母的順序排序*@"#"對應的字典永遠出現在數組最后一位*/- (NSArray *)arrayWithPinYinFirstLetterFormat {if (![self count]) {return [NSMutableArray array];}NSMutableDictionary *dict = [NSMutableDictionary dictionary];[dict setObject:[NSMutableArray array] forKey:@"#"];for (int i = 'A'; i <= 'Z'; i++) {[dict setObject:[NSMutableArray array]forKey:[NSString stringWithUTF8String:(const char *)&i]];}for (NSDictionary *dic in self) {NSString *words = dic[@"title"];NSString *firstLetter = [words getFirstLetter];NSMutableArray *array = dict[firstLetter];[array addObject:dic];}NSMutableArray *resultArray = [NSMutableArray array];for (int i = 'A'; i <= 'Z'; i++) {NSString *firstLetter = [NSString stringWithUTF8String:(const char *)&i];NSMutableArray *array = dict[firstLetter];if ([array count]) {[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {NSString *word1 = obj1[@"title"];NSString *word2 = obj2[@"title"];return [word1 localizedCompare:word2];}];NSDictionary *resultDict = @{@"firstLetter": firstLetter,@"content": array};[resultArray addObject:resultDict];}}if ([dict[@"#"] count]) {NSMutableArray *array = dict[@"#"];[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {NSString *word1 = obj1[@"title"];NSString *word2 = obj2[@"title"];return [word1 localizedCompare:word2];}];NSDictionary *resultDict = @{@"firstLetter": @"#",@"content": array};[resultArray addObject:resultDict];}return resultArray; }
  • 將沒有排序的數組按字母首字母的順序排列, 生成新的排序數組:
self.firstLitterArray = (self.bankArray! as NSArray).withPinYinFirstLetterFormat() as! [[String:Any]]

UITableView協議

  • 實現UITableViewDelegate,UITableViewDataSource以下的協議:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {return 35}func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {let view = UIView.init(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 35))view.backgroundColor = UIColor.init(red: 212/255.0, green: 212/255.0, blue: 212/255.0, alpha: 1)let label = UILabel.init(frame: CGRect.init(x: 16, y: 0, width: 15, height: 35))label.text = (self.firstLitterArray[section]["firstLetter"] as! String)label.textAlignment = .centerlabel.textColor = UIColor.init(red: 153/255.0, green: 153/255.0, blue: 153/255.0, alpha: 1)label.font = UIFont.boldSystemFont(ofSize: 14)view.addSubview(label)return view}func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {return (self.firstLitterArray[section]["firstLetter"] as! String)}func sectionIndexTitles(for tableView: UITableView) -> [String]? {var title : [String] = []for i in 0 ..< self.firstLitterArray.count {title.append(self.firstLitterArray[i]["firstLetter"] as! String)}return title}func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {if title == UITableView.indexSearch {return NSNotFound}return UILocalizedIndexedCollation.current().section(forSectionIndexTitle: index)}

效果展示

完整示例

Swift之UITableView新增“索引”數組快速定位查找數據

總結

以上是生活随笔為你收集整理的Swift之实现表格UITableView数据首字母顺序排列展示并添加“索引”快速定位查找功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。