【问题标题】:UITapGestureRecognizer on UIView and Its Subview Respond Together When Subview Is Tapped当子视图被点击时,UIView 上的 UITapGestureRecognizer 及其子视图一起响应
【发布时间】:2013-11-04 17:39:40
【问题描述】:

UITapGestureRecognizer 应用于UIImageView 及其子视图 (UITextView)。但是,当我点击子视图时,接收器变为子视图及其父视图(即UIImageView + UITextView)。然而,它应该只是 subview 因为那是我点击的那个。我假设嵌套手势会首先做出反应,但显然父母收到拳头点击然后它转到孩子。

因此,对于各种场景(与我的不同,而是滚动视图冲突中的按钮)有不同的解决方案。如何在没有可能的子类化和 iOS 6+ 支持的情况下轻松解决我的问题?我尝试在UIImageView 上延迟UIGestureRecognizer 的开始触摸,并尝试将cancelsTouchesInView 设置为NO - 都没有运气。

【问题讨论】:

  • 请介意分享一些代码。如何添加手势?

标签: ios iphone objective-c uiview uigesturerecognizer


【解决方案1】:

试试下面的代码:

使 UIGestureRecognizerDelegate> 符合您的班级。

设置yourGesture.delegate = self;

然后添加这个委托方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // return YES (the default) to allow the gesture recognizer to examine the touch object, NO to prevent the gesture recognizer from seeing this touch object.
    if([touch.view isKindOfClass: [UITextView class]] == YES)] {
        return YES;
    }
    else {
        return NO;
    }
}

希望它能解决您的问题。享受编码..!!!!

【讨论】:

  • 一些关于shouldReceiveTouch全图的cmets:在一切(手势识别、触摸事件等)之前处理过,会先调用子视图。
【解决方案2】:

这正是它应该做的。 视图层次结构就像一个树结构,它在触摸手势期间的遍历从根节点开始。您的父视图很可能首先接收手势,然后是其子视图。遍历跳过了

的节点

userInteractionEnabled = 否。

既然你没有任何代码,我无法帮助你玩这个标志。一个更通用的解决方案是始终只为您的 parentView 设置手势,并在手势代表中检查坐标是否属于任何一个子视图,如果是,则为您的子视图调用手势方法。 这不是一个干净的方法,但有效。 !!

【讨论】:

  • 我的问题是触摸手势总是转到超级视图并跳过子视图。将标志设置为“是”(或快速设置为“真”)挽救了我的生命
【解决方案3】:

当识别多个手势时,您应该实现 UIGestureRecognizer 委托方法并将正确的策略应用于手势

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多