Swift之实现表格UITableView数据首字母顺序排列展示并添加“索引”快速定位查找功能
【摘要】
整理数据
获取汉字拼音的首字母
/*
*获取汉字拼音的首字母, 返回的字母是大写形式, 例如: @"俺妹", 返回 @"A".
*如果字符串开头不是汉字, 而是字母, 则直接返回该字母, 例如: ...
整理数据
- 获取汉字拼音的首字母
/*
*获取汉字拼音的首字母, 返回的字母是大写形式, 例如: @"俺妹", 返回 @"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];
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 将一个字符串数组按照拼音首字母规则进行重组排序, 返回重组后的数组
/*
*将一个字符串数组按照拼音首字母规则进行重组排序, 返回重组后的数组.
*格式和规则为:
[
@{
@"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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 将没有排序的数组按字母首字母的顺序排列, 生成新的排序数组:
self.firstLitterArray = (self.bankArray! as NSArray).withPinYinFirstLetterFormat() as! [[String:Any]]
- 1
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 = .center
label.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)
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
效果展示
完整示例
Swift之UITableView新增“索引”数组快速定位查找数据
文章来源: blog.csdn.net,作者:Serendipity·y,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/Forever_wj/article/details/108210211
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)