iOS 9中未调用UITableViewCell内的iAction

iOS 9中未调用UITableViewCell内的iAction,ios,swift,uitableview,ibaction,Ios,Swift,Uitableview,Ibaction,我有一个自定义的UITableViewCell子类,它包含一些从nib连接起来的iAction方法 在iOS 8下,一切正常。如果用户点击其中一个按钮,将调用相应的iAction。如果用户点击单元格上的任何其他位置,则调用UITableView didSelectRowAtIndexPath 在iOS 9下,我的IBAction方法永远不会被调用。无论用户点击单元格中的哪个位置(按钮与否),始终会触发UITableViewdidSelectRowAtIndexPath 该项目在Xcode 6/S

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

在iOS 8下,一切正常。如果用户点击其中一个按钮,将调用相应的
iAction
。如果用户点击单元格上的任何其他位置,则调用
UITableView didSelectRowAtIndexPath

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

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

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


我想出了解决办法,希望这个答案能为其他人节省时间

我继承了这个代码库,它有一些问题。未在iOS 9下工作的
UITableViewCell
未使用
UITableViewCell
nibs w/a
ContentView
。相反,有人创建了一个
UIView
nib,然后将其指向一个自定义
UITableViewCell
子类。NIB没有
ContentView
,显然iOS9对此有点挑剔。这个实现在ios8下运行良好,没有编译器或运行时错误或警告


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

只需在
tableView
cellforrowatinexpath
方法中添加这一行即可

cell.contentView.userInteractionEnabled = false;
return cell;
但这不是一个恰当的解决方案

iOS 9将内容视图放置到
tableViewCell
,即使您使用自定义单元格/xib。在自定义单元格之后添加的内容视图位于其顶部


要正确解决此问题,只需将自定义单元格/xib的视图替换为对象库中的
UITableviewCell
[通常从其中拖放
UIButton
UILabel
,等等]

或者只需将对象库中的UITableViewCell添加到同一个xib文件中,copypaste/relayout/relink IBOutlets/set基类,然后删除旧视图。谢谢!真令人沮丧。非常感谢你的分享。我在这上面浪费了一整天直到看到你的答案。回答得好!我有一个遗留项目的问题。工作得很有魅力。谢谢,太好了!非常感谢,在上面浪费半天时间(如果你想快速修复,这是一个很好的解决方案。我使用的第三方框架已经停止工作。我所要做的就是在contentview上禁用用户交互。我在initWithCoder中这样做了(它是一个nib文件)。