我有一个自定义UITableViewCell
子类,其中包含从笔尖连接的几个IBAction
方法。
在iOS 8下,一切都按预期工作。如果用户点击其中一个按钮,则会调用相应的IBAction
。如果用户点击单元格上的任何其他位置,则会调用UITableView didSelectRowAtIndexPath
。
在iOS 9下,我的IBAction方法永远不会被调用。无论用户点击单元格(按钮与否),UITableView
didSelectRowAtIndexPath
始终会被触发。
该项目是在Xcode 6 / Swift 1.2下编译的。
我在Apple论坛上发现这篇帖子没有解决方案。他们似乎有同样的问题。
答案 0 :(得分:26)
我找到了解决方案,希望这个答案可以节省别人的时间。
我继承了这个代码库,但它有一些问题。在iOS 9下无效的UITableViewCell's
未使用UITableViewCell
笔尖与ContentView
。相反,有人创建了一个UIView
笔尖,然后将其指向自定义UITableViewCell
子类。这些笔尖没有ContentView
,显然iOS 9对此更加挑剔。这个实现在iOS 8下运行良好,没有编译器或运行时错误或警告。
解决方案是创建一个新的UITableViewCell
子类,让Xcode自动为它创建nib。然后我复制了旧笔尖的所有UI和代码,并将其粘贴到新笔尖的ContentView
中。然后,我必须修复约束并重新连接到自定义子类的连接。
答案 1 :(得分:6)
只需在tableView
cellForRowAtIndexPath
方法
cell.contentView.userInteractionEnabled = false;
return cell;
但这不是一个合适的解决方案。
iOS 9,即使您使用自定义单元格/ xib,也会将内容视图放入tableViewCell
。在自定义单元格之后添加内容视图,它位于自定义单元格之上。
要正确解决此问题,只需使用对象库中的UITableviewCell
替换自定义单元格/ xib的视图[通常拖放UIButton
,UILabel
等等...]; < / p>