### 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)
### 可见既有分组又有索引,但苹果不建议这样写,可能是出于对程序优化的考虑。
- 前言
- (1) iphone开发,自定义Window-based Application 模板及委托运行机制
- (2) iphone 开发 表视图UITableView结构深层剖析
- (3) iphone 开发 从应用程序看UITableView的:分组,分区,索引,工作原理及其变换法则,plist文件数据定义规则
- (4) iphone 开发 自定义UITableViewCell的子类 ,轻松添加图片文本信息等
- (5) iphone 开发 在表视图(UITableView) 中利用UISearchBar实现数据的搜索,视图的多功能化
- (6) iphone 开发 真正理解委托(delegate)与数据源(data source)
- (7)---01 iphone 开发 数据传递 NSNotification 通知机制演示
- (7)---02 iphone 开发 数据传递 : 页面切换与数据的反向传递以及协议(protocol)作用的体现
- (8)---01 iphone 开发 大话分析导航栏NavigationController
- (9) iphone 开发 AppSettings , 系统setting与应用程序setting间的数据控制
- (10) iphone 开发 用户点击,触摸和手势识别 解析