5

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

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

4

3 回答 3

11

试试下面的代码:

使 < 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;
    }
}

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

于 2013-10-26T05:34:40.120 回答
3

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

userInteractionEnabled = 否。

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

于 2013-10-25T14:58:33.710 回答
0

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

于 2013-10-25T14:49:29.643 回答