UITableViewCell在响应者链中跳过

Kei*_*man 12 uitableview uikit uiresponder ios responder-chain

我试图在a的子视图中触发一个事件UITableViewCell,让它冒泡响应者链并由自定义UITableViewCell子类处理.

基本上:

SomeView.m(这是一个子视图UITableViewCell)

[self.button addTarget:nil action:@selector(someAction:) events:UIControlEventTouchUpInside]
Run Code Online (Sandbox Code Playgroud)

SomeCustomCell.m

- (void)someAction:(id)sender {
     NSLog(@"cool, the event bubbled up to the cell");
}
Run Code Online (Sandbox Code Playgroud)

为了测试为什么这不起作用,我someAction:在ViewController上添加了方法,并且ViewController最终处理从表视图单元子视图冒泡的事件,即使Cell应该处理它.我已经检查过Cell是否在响应者链上,并且我已经验证了在单元格上方和下方的响应者链上的任何视图如果它们实现该someAction:方法将响应该事件.

到底发生了什么事?

这是一个显示它的项目https://github.com/keithnorm/ResponderChainTest这是预期的行为吗?我没有找到任何文档说明UITableViewCell的处理方式与其他UIResponder的处理方式不同.

nsc*_*idt 10

该单元格似乎要求其表格视图以获得许可.要改变它,你当然可以覆盖

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    return [self respondsToSelector:action];
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    return self.responds(to: action)
}
Run Code Online (Sandbox Code Playgroud)