获得cell之后怎样获得赋值给cell上控件的对象,,,我获得一个对象之后分别给cell上的控件赋值,,,之后点击btn之后在方法中仍需获得之前的那个对象,,,,请高手赐教
在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视图。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。