我需要实现一个功能,当我双击 self.view(UIViewController
的 View )时将调用一些代码。但问题是我在此 View 上有其他 UI 对象,我不想将任何识别器对象附加到所有对象。我在下面找到了如何在我的 View 上做手势的方法,我知道它是如何工作的。现在我处于障碍面前,选择哪种方式来创建这个忽略 subview 的识别器。有任何想法吗?谢谢。
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
[doubleTap setNumberOfTapsRequired:2];
[self.view addGestureRecognizer:doubleTap];
最佳答案
您应该在 self
对象中采用 UIGestureRecognizerDelegate
协议(protocol),并调用以下方法来检查 View 。在此方法中,根据 touch.view
检查您的 View 并返回适当的 bool 值(是/否)。像这样:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isDescendantOfView:yourSubView]) {
return NO;
}
return YES;
}
编辑:请同时检查@Ian 的回答!
swift 5
// MARK: UIGestureRecognizerDelegate methods, You need to set the delegate of the recognizer
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if touch.view?.isDescendant(of: tableView) == true {
return false
}
return true
}
关于ios - UITapGestureRecognizer 点击 self.view 但忽略 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15814697/