我在自定义UITableView
中有自定义TableViewCell
的{{1}},其中有UITableViewCell
(UIView
)。我想点击myView
时要停用didSelectRowAtIndexPath
,点击myView
时不应调用didSelectRowAtIndexPath
。
它与this question不同,因为在那个问题中,用户想要达到的目标并不清楚,答案也不同。
答案 0 :(得分:4)
您可以覆盖UITableViewCell的pointInside
,试试这个:
// MyCell.m
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
BOOL pointInside = [super pointInside:point withEvent:event];
if (pointInside && ![self.myView pointInside:[self convertPoint:point toView:self.myView] withEvent:event]) {
return YES;
}
return NO;
}
当你点击myView 时,不会调用 didSelectRowAtIndexPathshould
答案 1 :(得分:2)
iOS使用点击测试来查找触摸下的视图。命中测试涉及检查触摸是否在任何相关视图对象的范围内。如果是,则以递归方式检查该视图的所有子视图。包含触摸点的视图层次结构中的最低视图将成为命中测试视图。在iOS确定命中测试视图后,它会将触摸事件传递给该视图以进行处理
在图像打击中:
(图2-1命中测试返回被触摸的子视图)
为了说明,假设用户触摸图2-1中的视图E. iOS通过按以下顺序检查子视图来查找命中测试视图:
正如大多数应用程序所做的那样,不需要禁用didSelectRowAtIndexPath函数的执行。你可以在这里做的,就是在myView上添加UIButton
或添加UITapGesture并执行所需的任务,当你触摸UITapGesture区域,didSelectRowAtIndexPath
将无法执行。
就像这样: