我有一个UITableView和UINavigationController,我想区分两次点击:1)正常点击选择一行和2)在屏幕上任何其他地方发生的点击(除了UINavigationController上的按钮) 。我写了这段代码:
singleTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(singleTapHandler:)];
singleTap.numberOfTapsRequired = 1;
然而,问题在于它会覆盖选择行的普通点击。
答案 0 :(得分:1)
我假设您将点击识别器放在UIWindow
本身或窗口的唯一子视图上。您需要为点击识别器指定一个委托,该委托需要实现gestureRecognizer:shouldReceiveTouch:
。
在该方法中,如果触摸在按钮中或者触摸在表格视图单元格中,则您希望返回NO
,否则返回YES
。您需要沿着视图层次结构向上走,从触摸到达的视图开始,寻找其中任何一个类。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
for (UIView *view = touch.view; view; view = view.superview) {
if ([view isKindOfClass:[UIButton class]])
return NO;
if ([view isKindOfClass:[UITableViewCell class]])
return NO;
}
return YES;
}