UITableViewCell内的IBAction未在iOS 9中调用

我有一个自定义的UITableViewCell子类,它包含从nib连接的一些IBAction方法。

在iOS 8下,一切都按预期工作。 如果用户点击其中一个按钮,则调用相应的IBAction 。 如果用户点击单元格上的任何其他位置,则调用UITableView didSelectRowAtIndexPath

在iOS 9下,我的IBAction方法永远不会被调用。 无论用户在单元格中的哪个位置(按钮与否),都会触发UITableView didSelectRowAtIndexPath

该项目是在Xcode 6 / Swift 1.2下编译的。

我在Apple论坛上发现这篇文章没有解决方案。 他们似乎有同样的问题。

https://forums.developer.apple.com/thread/16179

我想出了解决方案,希望这个答案可以节省别人的时间。

我inheritance了这个代码库,它有一些问题。 在iOS 9下无法运行的UITableViewCell没有使用带有ContentView UITableViewCell笔尖。 相反,有人创建了一个UIView笔尖,然后将其指向自定义的UITableViewCell子类。 这些笔尖没有ContentView ,显然iOS 9对此更为挑剔。 这个实现在iOS 8下工作正常,没有编译器或运行时错误或警告。

解决方案是创建一个新的UITableViewCell子类,让Xcode自动为它创建nib。 然后我复制了旧笔尖的所有UI和代码,并将其粘贴到新笔尖的ContentView中。 然后我不得不修复约束并重新连接到自定义子类的连接。

只需在tableView cellForRowAtIndexPath方法中添加此行

 cell.contentView.userInteractionEnabled = false; return cell; 

但这不是一个合适的解决方案。

即使您使用自定义单元格/ xib,iOS 9也会将内容视图放入tableViewCell 。 在自定义单元格之后添加的内容视图,它位于其上方。

要正确解决这个问题,只需用对象库中的UITableviewCell替换自定义单元格/ xib的视图[通常拖放UIButtonUILabel等…];