uitableview 中怎么动态给cell中赋值

2023-02-05 10:29:41 发布:网友投稿 作者:网友投稿
热度:27

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

转载来自特酷吧

特酷吧的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于特酷电子设备、特酷吧的信息别忘了在本站进行查找哦。

下一篇:qq怎么发闪照?(qq怎么发闪照的功能在哪儿)
上一篇:汽车off键什么意思(汽车off键什么意思off)