【发布时间】:2014-02-15 02:31:51
【问题描述】:
我试图在UITableViewCell 的子视图中触发一个事件,并让它在响应者链中冒泡并由自定义UITableViewCell 子类处理。
基本上:
SomeView.m(这是UITableViewCell的子视图)
[self.button addTarget:nil action:@selector(someAction:) events:UIControlEventTouchUpInside]
SomeCustomCell.m
- (void)someAction:(id)sender {
NSLog(@"cool, the event bubbled up to the cell");
}
为了测试为什么这不起作用,我在 ViewController 上添加了 someAction: 方法,而 ViewController 是最终处理从表格视图单元子视图冒泡的事件的方法,即使细胞应该处理它。我已经检查了 Cell 是否在响应者链上,并且我已经验证了响应者链上的任何视图在单元上方和下方都将响应该事件,如果它们实现了 someAction: 方法。
这到底是怎么回事?
这是一个显示它的项目https://github.com/keithnorm/ResponderChainTest 这是某种预期的行为吗?我没有找到任何说明 UITableViewCell 的处理方式与其他 UIResponder 不同的文档。
【问题讨论】:
-
这很奇怪!我发现响应者链是:
ContentView->UITableViewCellContentView->UITableViewCellScrollView->TableCell->UITableViewWrapperView->UITableView->View->ViewController->UIWindow->UIApplication->AppDelegate。我是通过UIResponder * res = sender ; while (res) { res = [res nextResponder] ; NSLog(@"%@", [res class]) ; }找到的。我会关注这个问题。 -
是的,看起来应该可以了,对吧?感谢您检查并确认它对您来说也很奇怪:)
-
是的,我下载了您的项目并希望它可以工作但失败了。我也很困惑为什么它会跳过
TableCell。 -
所以你的目标是你只想触发 TableCell 的 customEventFired: 方法。对吗?
-
我想让事件在子视图中触发,但被 TableCell 捕获。
标签: ios uitableview uikit uiresponder responder-chain