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的视图[通常拖放UIButton
, UILabel
等…];