多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### UITableView 与其他相关组件一样,视图控制器须实现:数据源(UITableViewDataSource) ,委托(UITableViewDelegate)两个协议,(然后实现其方法) 。这样当视图控制器成为UITableView的数据源与委托时,就能为其工作(调用被实现的方法)。 ### 一:创建UITableview,默认是无格式表。 ![](https://box.kancloud.cn/2016-06-12_575cce7bd9ed4.png) ### 1)接下来就是创建输出口(使视图控制器得到界面上组建的实例,这里就是UITableView),连接委托(delegate),数据源(datasource),关于他们的具体解释上一篇日志已经提到,这里不做过多介绍。 ![](https://box.kancloud.cn/2016-06-12_575cce7c1db62.png) ### 2)创建一个plist文件用于定义数据(为视图显示提供数据):点击new file----->resource----->property list ![](https://box.kancloud.cn/2016-06-12_575cce7c41632.png) ### 3)在plist文件中定义数据: ![](https://box.kancloud.cn/2016-06-12_575cce7c61293.png) ### 4)添加数据规则: ![](https://box.kancloud.cn/2016-06-12_575cce7c810af.png) ### 5)查看数据代码: ![](https://box.kancloud.cn/2016-06-12_575cce7cb0336.png) ### 6)由此可见xcode的功能还是很好的,只要我们在界面上直观的点击加号,减号,添加数据和数据类型,在后台就会自动生成代码格式,很方便。    ok前期的数据工作就准备好了! ### 二:控制器.h文件遵循UITableViewDataSource,UITableViewDelegate两个协议,然后.m文件实现其方法(为视图显示做工作)。 ### 样例代码: ### 1)MyTableViewGroupController.h文件中: ![](https://box.kancloud.cn/2016-06-12_575cce7ce9f19.png) ### 2) ### 1. MyTableViewGroupController.m文件中:在viewDidLoad方法中初始化数据(从plist文件中获得数据) ![](https://box.kancloud.cn/2016-06-12_575cce7d161a6.png) ### 2. 实现 协议UITableViewDataSource的五个方法使数据按照操作显示在屏幕上,这里并没有实现协议UITableViewDelegate的方法。 ~~~ #pragma mark- #pragma mark Table View Group -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ //返回(向系统发送)分区个数,在这里有多少键就会有多少分区。 return [self.MyKey count]; } //所在分区所占的行数。 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ //获取当前分区所对应的键(key)。在这里键就是分区的标示。 NSString *key=[self.MyKey objectAtIndex:section]; //获取键所对应的值(数组)。 NSArray *nameSec=[self.resource objectForKey:key]; //返回所在分区所占多少行。 return [nameSec count]; } //向屏幕显示。 -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ //获得所在分区的行数 NSInteger row=[indexPath row]; //获得分区值 NSInteger section=[indexPath section]; //利用分区获得键值 NSString *key=[self.MyKey objectAtIndex:section]; //利用键值获得其所对应的值 NSArray *MySectionArr=[self.resource objectForKey:key]; //定义标记,用于标记单元格 static NSString *SectionTableMyTag=@"dong"; UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:SectionTableMyTag]; //如果当前cell没被实例(程序一开始就会运行下面的循环,直到屏幕上所显示的单元格格全被实例化了为止,没有显示在屏幕上的单元格将会根据定义好的标记去寻找可以重用的空间来存放自己的值) if (cell==nil) { cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SectionTableMyTag]; } cell.textLabel.text=[MySectionArr objectAtIndex:row]; return cell; } //把每个分区打上标记key -(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ NSString *key=[self.MyKey objectAtIndex:section]; return key; } //在单元格最右放添加索引 -(NSArray*)sectionIndexTitlesForTableView:(UITableView *)tableView{ return self.MyKey; } ~~~ ### 3)看运行结果: ![](https://box.kancloud.cn/2016-06-12_575cce7d34e36.png) ### 很明显这是一个分区索引表。如果只想要无格式表,就是不用写numberOfSectionsInTableView返回分区数,这个方法。同理如果想要除去索引,只需不写其方法sectionIndexTitlesForTableView即可。 ### 4)直接改为分组表 ![](https://box.kancloud.cn/2016-06-12_575cce7d4dfec.png) ![](https://box.kancloud.cn/2016-06-12_575cce7d81bd5.png) ### 可见既有分组又有索引,但苹果不建议这样写,可能是出于对程序优化的考虑。