IOS每天15个注意点系列之UI-tableView

<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>对于嵌套的一个属性,在对它设定一个类方法返回数组的时候,方法要有一个传入的参数,参数也是一个数组.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值