欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

UITableViewCell的父视图

程序员文章站 2022-07-26 16:22:32
最近版本测试阶段,发现一个奇怪的问题,以前在A测试机上出现的崩溃bug,解决后今天在B测试机上又出现了,在B上解决完之后,返回到设备A上发现又不行了。最后调试发现是测试设备系统版本不同导致的,A设备是iOS10的,而B设备是iOS11的,需求是,当点击自定义的UITableViewCell时,需要它 ......

  最近版本测试阶段,发现一个奇怪的问题,以前在A测试机上出现的崩溃bug,解决后今天在B测试机上又出现了,在B上解决完之后,返回到设备A上发现又不行了。最后调试发现是测试设备系统版本不同导致的,A设备是iOS10的,而B设备是iOS11的,需求是,当点击自定义的UITableViewCell时,需要它所在的UITableView跳转到下一页面。

  最初用到的具体核心代码是:

   [(UITableView *)self.superview reloadData]; 

于是在A设备上闪退了,错误信息如下:

UITableViewCell的父视图

其中有解释说[UITableViewWrapperView reloadData]方法找不到,最后好奇的看了下层级结构,终于明白是什么情况了,总结下:

iOS7至iOS10系统下的UItableViewCell的父视图是UITableViewWrapperView,而iOS7以下和iOS11以上系统UItableViewCell的父视图是UITableViewCell。

所以之后点击cell跳转应该判断系统版本

 

 float version=[[[UIDevice currentDevice] systemVersion] floatValue];
 if(version >= 7.0 && version < 11.0)
 {
     [(UITableView *)self.superview.superview reloadData];
 }else
 {
     [(UITableView *)self.superview reloadData];
 }

或者

if ([self.superview isKindOfClass:[UITableView class]]) {
     [(UITableView *)self.superview reloadData];
 }else{
     [(UITableView *)self.superview.superview reloadData];
 }

知道问题的原因了,解决方法可以有多种,就不多说了,希望对小伙伴有帮助。