iOS 中UITableView的深理解

例以下图:首先分析一下需求:1.根据模型的不一样状态显示不一样高度的cell,和cell的UI界面。spa

2.点击cell的取消按钮时,对应的cell首先要把取消按钮隐藏掉,而后改变cell的高度。代理

 

根据需求先解决第一个需求,须要两步对象

当模型数据的属性的status =@"2",不显示取消按钮;status = @"1",显示取消按钮。blog

1.须要注意的是cell的重用在这里面互有一些影响,因此在自定义cell的模型的setter方法中,io

在cell.m文件中写上模型setter方法的伪代码:table

if(status == 1){
  // cell中添加对应的UIButton  
}else if(status == 2) {
  // 若是上一步建立在cell中的建立的按钮存在,那么移除对应的按钮。也就是置为nil,不然会出现重用  
}

2.在控制器中计算cell高度对应代理的方法中class

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    
// 对应的模型显示对应的高度,因此首先须要获得对应的模型,获取模型能够根据cell里的属性模型得到,即经过自定义cell的对象方法,得到cell中模型的属性。
获得对应的属性后,根据对应的模型中属性的状态显示对应的高度。 // 这里须要知道获取cell,不只是经过tableView对应的indexPath得到的,还能够经过自定义的cell的对象方法得到cell。 return ; }

 经过以上两步就能够解决第一个需求。model

第二个需求:点击cell的取消按钮时,对应的cell首先要把取消按钮隐藏掉,而后改变cell的高度。方法

 

监听cell中按钮的方法有两种方法:第必定义button的tag值,在控制器中获取,而后监听方法,或者把button的属性写在cell.h中在cell的数据源代理中获得cell.btn 而后监听方法。im

第二种方法是,在cell中建立代理方法,当点击cell中的button在cell中监听button被点击的方法,而后相应对应的代理,能够传参,如cell 和 对应model。

因此这里就用到了这一种方法。点击的时候把对应行cell的model传过去,而后改变model中的属性的状态,reload对应行的cell便可。

相关文章
相关标签/搜索