同事反馈有用户 手机升级到 14.2某个button 点击没反应了。一查发现button在UITableViewCell上并且是 [cell addSubview:button];的方式添加的。当把 [cell addSubview:button] 换成 [cell.contentView addSubview:button];可以正常点击了。那么问题来了,是什么导致14无法点击呢?苹果又整了什么幺蛾子 <手动狗头>
UIButton *btn = [[UIButton alloc]init];
btn.frame = CGRectMake(20, 10, 100, 30);
btn.tag = 100 + indexPath.row;
if (indexPath.row % 2 == 0) {
btn.backgroundColor = [UIColor redColor];
[cell addSubview:btn];
} else {
btn.backgroundColor = [UIColor greenColor];
[cell.contentView addSubview:btn];
}
[btn addTarget:self action:@selector(btnClick:) forControlEvents:(UIControlEventTouchUpInside)];
测试上面的代码:
添加到cell上的点击没反应,添加到cell的contenView上的可以!
看层级图:
添加cell上的很明显被 contenView 挡住了;添加contenView上的绿色没被遮挡;
之前怎么可以点击呢? 之前contenView在下面呢。苹果又搞什么鬼呢<吐血>
总结:以后尽量别把控件加在cell上,要加在cell的contenView 上。显示控件无所谓(尽量不要加),有点点击事件的老老实实加在contentView上吧!
奉上神图以供参考:(注意继承UIcontrol下的控件)
//tip
1 加在cell上的通过cell.subviews 有可能添加的btn,把btn加在cell.contentView上,查找时通过cell.contentView.subviews就可以完美的解决这个问题。
2 区别在于进行cell编辑时,比如cell内容向左移或者右移时, 添加cell方式子视图不会移动, 添加cell的contentView,所以这种情况一般使用第二种方式。
还有在设置backgroundColor时,使用cell设置时左移或者右移颜色是不会变的,而用cell.contentCell设置时,移动后的空白会显示cell的默认颜色,这种情况视实际情况选择。
以前添加cell和cell.contentView上区别不大 ,ios 14 以后就需要注意一下了。