开发者社区> 问答> 正文

获得cell之后怎样获得赋值给cell上控件的对象

获得cell之后怎样获得赋值给cell上控件的对象,,,我获得一个对象之后分别给cell上的控件赋值,,,之后点击btn之后在方法中仍需获得之前的那个对象,,,,请高手赐教

展开
收起
杨冬芳 2016-06-28 19:23:46 2251 0
1 条回答
写回答
取消 提交回答
  • IT从业

     在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视图。
     

    2019-07-17 19:48:42
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载