<1>什么是UITableView?
-> UITableView继承自UIScrollView,可以滚动,查看里面的内容。再IOS开发中,UITableView是展示大量内容的首选。
-> UITableView具有重用和延迟加载等特性,可以有效的提高效率(它并不会一次性的将所有数据进行加载,而只是加载当前视图中可见的数据)
-> UITableVIew的每一行数据就是一个UITableViewCell,UITableView只能有一列数据(cell),且只支持纵向滑动,当创建好的tableView第一次显示的时候,我们需要调用期reloadData方法,强制刷新一次,从而使tableView的数据更新到最新状态
<2>dataSource:是UITableViewDataSource类型,主要为UITableView提供显示用的数据,指定UITableViewCell 支持的编辑操作类型(insert,delete和reordering),并根据用户的操作进行相应的数据更新操作。
delegate:是UITableViewDelegate类型,主要提供一些可选的方法,用来控制tableView的选择,指定section的头和尾的显示
rowHeight:设置每一行数据的高度
UITableView的style属性:
a) plain:不分组,所有数据都属于同一个组
b)grouped:分组,会显示有默认的头部块和底部块
<3>常用数据源方法:
->在展示大量数据的时候我们需要考虑:1.全部的数据一共可以分为多少组.2.每一组有多少条数据.3.每一条数据的具体内容是什么..基于这三点我们需要掌握下面数据源方法
1.
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView:
一共有几组数据,如果没有实现这个数据源方法,那么系统默认只有一组数据,也就意味着默认返回1.
2.- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section:这个方法确定对应的组中有几条数据,必须实现这个方法,否则数据无法显示
3
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;这个方法确定某个组中某一行具体的内容,在UITableView中,真正的数据显示在cell中,所以为cell赋值才能真正的让数据展示出来。
4- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section:设置头部文本,返回默认样式的文本
5-- (NSString *) tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section:设置底部文本,返回默认样式的文本
<4>UITableVIewCell的三个重要属性
imageView:默认在最左边显示的小图像,可以不设置,如果没有则不显示
textLabel:显示的文本,一般情况下显示的文本都是使用这个属性
detailTextLabel:显示的详细介绍,一般字体大小比textLabel小,如果不设置则不显示.
<5>UITableVIewCell的样式(style):
这歌属性只有在创建的时候可以设置
->UITableViewCellStyleDefault:
->UITableViewCellStyleSubtitle:该格式与前一种相比,增加了对detailTextLabel的支持,该标签将会显示在textLabel标签的下面,字体相对较小。
->UITableViewCellStyleValue1:该格式居右边显示detailTextLabel,且字体较小
->UITableViewCellStyleValue2.该格式居左显示一个小型蓝色主标签textLabel,在右边显示一个小型黑色副标题详细标签detailTextLabel,该格式不支持图像
<6>UITableViewCell的accessoryType属性
->UITableViewCellAccessoryNone
->UITableViewCellAccessoryDisclosureIndicator右边有一个小箭头,距离右边有十几像素
还有几个,不一一列举
<7>实现过程:
->在storyBoard上添加UITableView控件
->让控制器遵守协议:@interface ViewController ()<UITableViewDataSource>
->指定UITableView的数据源为当前控制器:self.tableView.dataSource=self;
<8>关于NSIndexPath:用来标识当前cell在tableView中的位置,该类别有section和row两个属性,前者标识当前cell处于第几个section中,后者表示在该section中的第几行
<9>常用方法:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath:在cell 被选择的时候调用这个方法,我们可以在这个方法里面对选择的cell进行相关的操作
- (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section:可以为头部设置自定义的view,它需要我们创建自定义的view.
<10>UITableView的性能优化(cell的循环利用)
1->为什么需要优化:IOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存,要解决该问题,需要重用UITableViewCell对象
2->优化原理:当滚动列表时,部分UITableViewCell会移出窗口,当UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableVIew和要求dataSource返回UITableViewCell,dataSource会用新的数据配置这个UITableViewCell,然后返回给UITableView,重新显示到窗口中,从而避免创建新对象,这就节省了创建对象的时间,也避免了反复的内存分配和开销。
3->如何进行cell的重用:可以在初始化UITableViewCell的时候传入一个特定的字符串标识来设置reuseIdentifier(一般用UITableViewCell的类名).当UITableView要求dataSource返回UITableViewCell时,先通过一个字符串标识到对象池中查找对应类型的UITableViewCell对象,如果有就重用,如果没有,就传入这个字符串标识来初始化一个UITableViewCell对象,以便下次重用。
<11>UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
<12>分析plist文件的(嵌套模型):一个模型对象的某个属性又是一个模型对象
<13>添加侧边导航
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
NSArray *arr=[self.carGroups valueForKeyPath:@“title”];
return arr;
}
设置UITableView右侧显示的组导航
<14>KVC:指NSKeyValueCoding,一个非正式的protocol.可以直接通过字符串的名字来访问类的属性的机制。
<15>对于嵌套的一个属性,在对它设定一个类方法返回数组的时候,方法要有一个传入的参数,参数也是一个数组.