简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗

UITableView索引功能是常见的,主要是获取中英文的首字母并排序,系统自带获取首字母

//系统获取首字母
- (NSString *) pinyinFirstLetter:(NSString*)sourceString {NSMutableString *source = [sourceString mutableCopy];CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformMandarinLatin, NO);CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformStripDiacritics, NO);//这一行是去声调的return source;
}

 

PinYin.h文件是网上比较常用的获取中英文首字母方法,NSString+PinYin.h是别人写的获取首字母并对首字母进行字典分类的NSString Categrory,这样大大简化了ViewContorl里的代码量

在只需一行就能获得首字母分类排序后的数组

参考:http://rainbownight.blog.51cto.com/1336585/1368730

//导入 #import "NSString+PinYin.h"
//索引数组
NSArray  *indexArray= [array arrayWithPinYinFirstLetterFormat];

 

主要代码

#import "ViewController.h"
#import "NSString+PinYin.h"@interface ViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate>@property(nonatomic,strong)  UITableView     *myTableView;
@property(nonatomic,strong)  NSMutableArray  *dataArray;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.
    [self initDataSource];[self createTableView];
}

 

UI及数据源

#pragma mark----CreatMyCustomTablevIew-----
- (void)createTableView
{self.myTableView = [[UITableView  alloc] initWithFrame:CGRectMake(0,20,self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];self.myTableView.delegate = self;self.myTableView.dataSource = self;[self.myTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"REUSE_CELLID"];self.myTableView.contentSize=CGSizeMake(self.view.frame.size.width, self.view.frame.size.height*2);[self.view  addSubview:self.myTableView];self.myTableView.sectionIndexColor =[UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:1.0];    self.myTableView.sectionIndexBackgroundColor=[UIColor clearColor];[self.myTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellID"];UISearchBar  *mSearchBar = [[UISearchBar alloc] init];mSearchBar.delegate = self;mSearchBar.placeholder = @"搜索";[mSearchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];[mSearchBar sizeToFit];self.myTableView.tableHeaderView=mSearchBar;
}- (void)initDataSource
{NSArray *array = @[@"登记", @"大奔", @"周傅", @"爱德华",@"((((", @"啦文琪羊", @"   s文强", @"过段时间", @"等等", @"各个", @"宵夜**", @"***", @"贝尔",@"*而结婚*", @"返回***", @"你还", @"与非门*", @"是的", @"*模块*", @"*没做*",@"俄文", @"   *#咳嗽", @"6",@"fh",@"C罗",@"邓肯"];self.dataArray =[NSMutableArray arrayWithArray:indexArray];[self.myTableView reloadData];
}

 

TableView相关代理

#pragma mark--- UITableViewDataSource and UITableViewDelegate Methods---
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{return [self.dataArray count];
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{if(section == 0){return 1;}else{NSDictionary *dict = self.dataArray[section];NSMutableArray *array = dict[@"content"];return [array count];}
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{UITableViewCell  *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];NSDictionary *dict = self.dataArray[indexPath.section];NSMutableArray *array = dict[@"content"];cell.textLabel.text = array[indexPath.row];cell.textLabel.textColor = [UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:1.0];return cell;
}- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{//自定义Header标题UIView* myView = [[UIView alloc] init];myView.backgroundColor = [UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:0.7];UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 90, 22)];titleLabel.textColor=[UIColor whiteColor];NSString *title = self.dataArray[section][@"firstLetter"];titleLabel.text=title;[myView  addSubview:titleLabel];return myView;
}

TableView索引栏相关设置

#pragma mark---tableView索引相关设置----
//添加TableView头视图标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{NSDictionary *dict = self.dataArray[section];NSString *title = dict[@"firstLetter"];return title;
}//添加索引栏标题数组
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{NSMutableArray *resultArray =[NSMutableArray arrayWithObject:UITableViewIndexSearch];for (NSDictionary *dict in self.dataArray) {NSString *title = dict[@"firstLetter"];[resultArray addObject:title];}return resultArray;
}//点击索引栏标题时执行
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{//这里是为了指定索引index对应的是哪个section的,默认的话直接返回index就好。其他需要定制的就针对性处理if ([title isEqualToString:UITableViewIndexSearch]){[tableView setContentOffset:CGPointZero animated:NO];//tabview移至顶部return NSNotFound;}else{return [[UILocalizedIndexedCollation currentCollation] sectionForSectionIndexTitleAtIndex:index] - 1; // -1 添加了搜索标识
    }
}

 

Demo 下载  http://files.cnblogs.com/files/sixindev/PinyinIndexTableview.zip

转载于:https://www.cnblogs.com/sixindev/p/4504578.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab——图像细化

所谓细化&#xff0c;就是从原来的图像中去掉一些点&#xff0c;但仍要保持原来的形状。 1、代码如下&#xff1a; close all;clear all;clc; %关闭所有图形窗口&#xff0c;清除工作空间所有变量&#xff0c;清空命令行 I1imread(circles.png); subplot(1,3,1),imshow(I1);…

中国60家最强汽车初创在此!芯片厂高调入局,智能网联强势霸榜

来源&#xff1a;智东西摘要&#xff1a;中国汽车科技最全地图&#xff01;2018年&#xff0c;知名市场研究机构毕马威再次设立了中国汽车科技领先企业50强和新锐企业10强榜单评选&#xff0c;并在近日公布了结果。备选企业包括在智能网联、汽车后市场服务、汽车制造技术、出行…

专设AI周会 高管悉数到场 微软CEO有多重视人工智能?

来源&#xff1a;CNBC 翻译 | 网易智能 (天门山)据CNBC报道&#xff0c;一般在每周的周四&#xff0c;微软首席执行官萨蒂亚纳德拉(Satya Nadella)和微软高管团队都要在一起开会&#xff0c;讨论该公司越来越多的人工智能&#xff08;AI&#xff09;项目。微软首席技术官凯文斯…

汽车电子:下一个苹果产业链

来源&#xff1a;安信证券摘要&#xff1a;本文将从“7个层级深度解析”这次产业发展红利带来巨大且丰富的投资机遇。汽车电子产业&#xff0c;预计将是继家电、PC和手机之后又一次全产业链级别的大发展机遇&#xff0c;不同的是&#xff1a;1. 其构成产品附加值更高(高稳定/高…

模块化开发之sea.js实现原理总结

seajs官网说&#xff1a;seajs是一个模块加载器&#xff0c;所以学习它并不难。 在我的理解就是&#xff1a;本来我们是需要手动创建 script标签 引入 js文件的&#xff0c;但用seajs后&#xff0c;它就自动帮我们完成这些工作。 这里只说实现原理&#xff0c;具体使用请看seaj…

【干货】百度联合清华大学发布国内首个基于AI实践的《产业智能化白皮书》(附报告全文)...

来源&#xff1a;百度AI在4月9日举行的“百度大学 Alpha 学院首期学员毕业典礼”上&#xff0c;百度联合清华大学发布国内首个基于 AI 实践的行业重磅报告&#xff0c;《产业智能化白皮书——人工智能产业化发展地形初现端倪》。这是国内首次从产业演进的视角探讨 AI 与产业融合…

全球语种谱系图,看看机器翻译需要跨越的大山

来源&#xff1a;语言春秋编辑 | 北外新闻中心 杨丹蕊摘要&#xff1a;当前机器翻译技术可以分成两类&#xff0c;一种是 Rich Resource NMT&#xff0c;也就是双语语料丰富的语言对&#xff08;比如中文 - 英文&#xff09;&#xff1b;另一种叫 Low Resource NMT&#xff0c…

Big Data Security Part One: Introducing PacketPig

Series Introduction Packetloop CTO Michael Baker (cloudjunky) made a big splash when he presented ‘Finding Needles in Haystacks (the Size of Countries)‘ at Blackhat Europe earlier this year. The paper outlines a toolkit based onApache Pig, Packetpig pack…

美国科学家成功恢复老年人工作记忆,望奠定认知干预疗法基础

来源&#xff1a;科技日报伴随着人体衰老&#xff0c;大脑对信息加工和贮存的能力也必然会下降&#xff0c;但如果这种能力可以被逆转呢&#xff1f;据英国《Nature Neuroscience》杂志8日在线发表的一项研究&#xff0c;美国科学家通过同步脑区节律——按特定节律刺激颞叶和额…

广告机市场和产品

广告机行业分析 前言 关于广告机&#xff0c;不同的人有不同的认识&#xff0c;此部分主要说明文中所指广告机的范围。 在讨论前&#xff0c;先区分几个概念。 1、 广告机与数字标牌 数字标牌是数字标示牌的简称&#xff0c;指代显示任意信息的显示终端&#xff1b;广告机是指…

《工业大数据白皮书》2019版正式发布

来源&#xff1a;悟空智能科技近日&#xff0c;由中国电子技术标准化研究院、全国信息技术标准化技术委员会大数据标准工作组主编&#xff0c;工业大数据产业应用联盟联合主编&#xff0c;联想集团等多家联盟成员企业参编的《工业大数据白皮书&#xff08;2019版&#xff09;》…

产品金字塔

制造业产品大概可以分为三个层次&#xff0c;第一层为实物&#xff0c;第二层为服务&#xff0c;第三层为体验。其中产品为基础&#xff0c;服务为改善&#xff0c;共同给客户美好的体验。三者组成一个产品金字塔。第一层&#xff0c;实物。比如手机&#xff0c;满足通话、上网…

学界 | UC伯克利发布一个低成本家居机器人,会叠衣服、会泡咖啡

BLUE 机器人叠毛巾&#xff0c;实际花费时间约 50 秒来源&#xff1a;AI科技评论加州大学伯克利分校 Pieter Abbeel 教授今天在推特公开宣布了伯克利机器人学习实验室最新开发的机器人 BLUE。这款机器人的特点是低成本&#xff08;不到 5000 美元&#xff09;、基于 AI 控制&am…

JAVA并发编程3_线程同步之synchronized关键字

在上一篇博客里讲解了JAVA的线程的内存模型&#xff0c;见&#xff1a;JAVA并发编程2_线程安全&内存模型&#xff0c;接着上一篇提到的问题解决多线程共享资源的情况下的线程安全问题。 不安全线程分析 public class Test implements Runnable {private int i 0;private i…

深度学习技术发展趋势浅析

来源&#xff1a;中国信息通信研究院CAICT当前&#xff0c;人工智能发展借助深度学习技术突破得到了全面关注和助力推动&#xff0c;各国政府高度重视、资本热潮仍在加码&#xff0c;各界对其成为发展热点也达成了共识。本文旨在分析深度学习技术现状&#xff0c;研判深度学习发…

(含Matlab源码)算术编码(arithmetic coding)的underflow问题

0、文章结构 文章的行文逻辑如下&#xff0c;看官可以根据需要跳读&#xff0c;节省时间。 1、介绍underflow和overflow. 2、underflow问题起源 3、underflow问起探索 4、underflow和overflow的常见情形 5、处理一些溢出问题的小技巧 6、对其中的两种小技巧的优缺点比较…

人类与AI结合的最佳形态是什么样?|A16Z内部万字报告

来源&#xff1a;A16Z合伙人Frank Chen2017年7月&#xff0c;我发布了一个关于人工智能、机器学习和深度学习的入门视频。从那以后&#xff0c;我一直痴迷于阅读关于机器学习的报道。一般来说&#xff0c;你会在媒体的头版上看到两类报道。一类报道的标题是“机器人来抢你的工作…

(Matlab源码)Matlab实现算术编码(Arithmetic coding)超级详解(每一段代码都可以看懂)

1、代码功能 输入&#xff1a;一个字符串输出&#xff1a; codeword&#xff08;码值&#xff09; codeword所占的位数 2、代码框图 3、代码超详解 统计字符串中的字符种类&#xff0c;调用函数&#xff0c;放入数组b中。 bunique(str1); 统计每种字符的个数&#xff0c;放入…

(含Python源码)Python实现K阶多项式的5种回归算法(regression)

0、文章结构 为了方便客官根据需要取阅&#xff0c;节约时间&#xff0c;文章目录结构如下&#xff1a; 问题描述理论部分&#xff1a;五种回归算法两种Python读取文件的方法Python实现五种回归算法使用的工具箱总结 1、问题描述 K阶多项式表达式 其中&#xff0c; 现有数据…

首张人类黑洞照片的背后

摘要&#xff1a;沈海军&#xff1a;今天&#xff08;2019年4月10日&#xff09;下午接受广东卫视采访&#xff0c;就晚上21:00即将发布的人类首张黑洞照片发表了评论。提笔撰稿时&#xff0c;尚未到照片官方的发布时间&#xff0c;故不能一睹黑洞照片的芳容&#xff0c;但鉴于…