iOS 中UITableView的深理解

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

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

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

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

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

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

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

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

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{

// 对应的模型显示对应的高度,所以首先需要得到对应的模型,获取模型可以根据cell里的属性模型获得,即通过自定义cell的对象方法,获得cell中模型的属性。得到对应的属性后,根据对应的模型中属性的状态显示对应的高度。
// 这里需要知道获取cell,不仅是通过tableView对应的indexPath获得的,还可以通过自定义的cell的对象方法获得cell。
return ;
}

 通过以上两步就可以解决第一个需求。

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

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

第二种方法是,在cell中创建代理方法,当点击cell中的button在cell中监听button被点击的方法,然后相应对应的代理,可以传参,如cell 和 对应model。

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

时间: 2024-10-01 05:09:56

iOS 中UITableView的深理解的相关文章

IOS中UITableView异步加载图片的实现

本文转载至 http://blog.csdn.net/enuola/article/details/8639404 最近做一个项目,需要用到UITableView异步加载图片的例子,看到网上有一个EGOImageView的很好的例子. 但是由于,EGOImageView的实现比较复杂,于是自己就动手做了一个AsynImageView,同样可以实现EGOImageView的效果. 而且自己写的代码比较清晰,容易理解,同样可以实现指定placehoderImage以及指定imageURL,来进行图片

iOS中UITableView的一些设置

不可滑动: ? 1 tableView.userInteractionEnabled = NO; 也可以在storyboard中的userInteractionEnable属性设置 显示导向箭头: ? 1 2 // 显示导向箭头 cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 自定义按钮: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - (

iOS中UITableView和UICollectionView的默认空态页

项目中想实现空态页风格统一控制的效果,就封装了一个默认空态页,使用的技术点有:1 方法替换 ,2 给分类(Category)添加属性. 我们知道,扩展(extension)可以给类添加私有变量和方法.但是分类(Category)不可以,但是我们又想在原生的UITableView和UICollectionView上添加空态页,所以使用了黑科技runtime中提供的对象关联.objc_setAssociatedObject/objc_getAssociatedObject. 懒得说明了,具体看代码.

iOS中UITableView数据源刷新了,但tableview当中的cell没有刷新

你会不会遇到通过断点查看数据源模型的确刷新了,但是tableview没有刷新的情况,我遇到了,并通过下面的方法解决了,供大家参考! 在tableview中的数据源代理方法 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo } span.s1 { } span.s2 { font: 11.0px Menlo; color: #703daa } - (UITableViewCell *)tableView:(UITableView

IOS中UITableview的两种Header view

UITableview中可以通过 1 UITableView *_tableView; 2 _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStyleGrouped]; 来生成一个表格,在style中有两个类型可以选择 1 typedef NS_ENUM(NSInteg

ios中关于对锚点的理解

锚点在ios中见到的地方不多,大部分用在动画中. 今天看到一个动画,上面都是关于锚点的,锚点这个概念在两年前看cocos2d得基本概念时接触过,当时没怎么看,今天看到了,就在好好的学一下. 看了一篇blog,是关于锚点的,就借鉴一些上面的图像: cocos2d里采用OpenGL ES坐标系,坐标原点在屏幕左下角.而ios采用的是Quartz 2D坐标系,坐标原点在屏幕左上角. 在cocos2d和ios中分别把视图的坐标点设为(10,10),结果如下: 那么什么是锚点呢?下面以一个例子来说明: 比

iOS 中delegate的理解与使用(传值)

之前做了半年的iOS,刚入了门,又被拉去转战java,现在iOS的那位大佬离职了,又被弄过来维护app,之前对于iOS中的delegate一直都是半知半解,所以刚好趁着这个机会把我所了解的记下来,以便日后查阅. - delegate的理解 delegate, 也就是代理模式(设计模式的一种),我现在所了解的代理模式是,当我有事要做但是没空的时候,我就可以请别人帮下忙,我告诉你我要做什么,但是具体怎么做,那是你的事了,就比如说,我想去约个妹纸出来玩,但是自己刚好现在有事不能约,或者自己不好意思约,

IOS开发中UITableView(表视图)的性能优化及自定义Cell

IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITableView实现的.UITableView这个控件中的列表的每一行是一个cell,当UITableView中cell数量特别大的时候,由于每次都需要alloc分配内存并初始化,会导致app运行不流畅,所以可以使用苹果提供的几个方法进行优化,我把这个过程记录下来供自己以后查阅. 当然,既然说到优化,那我们

iOS中表格(UITableView)嵌套表格的简单实现

iOS中表格(UITableView)嵌套表格的简单实现 首先说一下思路:我们在一个控制器里面定义2个tableview,一个作为被嵌套的rootTable,一个作为嵌套的表格tableView1,那我们要实现UITableViewDelegate,UITableViewDataSource,的代理的时候,该怎么区分呢?其实很简单,有两种方法,一个是给定义的2个tableview设置tag值,另一个是直接写出来tableView == rootTable时实现他得代理,否则就实现tableVie