uitableview 中怎么动态给cell中赋值

 我来答
huanglenzhi
推荐于2016-07-14 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517183
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  在IOS开发中用得最多的应该算是UITableVIew了,凭着UITableView的强大功能,使开发者可以简单的配置就能开发出很不错的效果。本次特酷吧介绍的是动态改变UITableVIew的cell高度上的问题。
  我们知道,UITableVIew有一个rowHeight属性或者是在heightForRowAtIndexPath方法中都可以配置UITableVIew的cell高度。但这样设置一般都会将所有的cell统一设置了。如果我们的应用中存在不同的cell内容就会产生不同的cell高度,而这个高度是需要根据现场内容自动变化的,就不能在heightForRowAtIndexPath中简单设置。
  另一方面在使用heightForRowAtIndexPath方法的过程中,如果我们在该方法中调用cellForRowAtIndexPath方法[也许你试图通过cellForRowAtIndexPath获得当前的cell,并根据该cell的内容高度来返回给heightForRowAtIndexPath方法]就会导致循环递归引发堆栈溢出,最终导致程序崩溃。产生这个问题的原因是:heightForRowAtIndexPath这个委托的调用时刻是早于cellForRowAtIndexPath的调用时刻的。而cellForRowAtIndexPath是用于返回当前的cell的。如果cell还没有返回,我们是不能在heightForRowAtIndexPath中通过cellForRowAtIndexPath获得当前cell的。如果我们偏偏这么做了,那么调用cellForRowAtIndexPath方法会触发heightForRowAtIndexPath委托方法,而heightForRowAtIndexPath又调用了cellForRowAtIndexPath,导致无限循环。
  当然,我们也不是不能在heightForRowAtIndexPath中调用cellForRowAtIndexPath,只需要在调用cellForRowAtIndexPath之前将UITableVIew的delegate设置为空,等到获取到cell后再重新赋值即可。如下示例:
  tableView.delegate=nil;
  UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
  tableView.delegate=self;
  但我们这样做的意义是什么呢?
  所以,以上叙述的目的就是明确:不要在heightForRowAtIndexPath方法中调用cellForRowAtIndexPath。
  而如果需要动态改变UITableVIew中的cell高度,一般的做法就是再cellForRowAtIndexPath方法中根据cell内容重新绘制cell视图。
  转载来自特酷吧
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式