为啥 UIButton 会覆盖 UITapGestureRecognizer?

Posted

技术标签:

【中文标题】为啥 UIButton 会覆盖 UITapGestureRecognizer?【英文标题】:Why is a UIButton is overriding UITapGestureRecognizer?为什么 UIButton 会覆盖 UITapGestureRecognizer? 【发布时间】:2010-09-30 23:41:49 【问题描述】:

我有一个带有 2 个子视图的父 UIView:一个 UIButton 和一个实现了 UITapGestureRecognizer 的 UIScrollView。 UITapGestureRecognizer 用于放大和缩小滚动视图,按钮用于显示/隐藏一些文本。

我的问题是,一旦我使用了 UIButton,UITapGestureRecognizer 就不再起作用了。

另外,UITapGestureRecognizer 是在 scrollView 的类中实现的,这是正确计算 zoomScale 所必需的。

我发现了一些类似的问题,但他们遇到了相反的问题。 有什么想法吗?

谢谢!

编辑:我刚刚意识到,使用按钮后,如果我在 scrollView 中滚动或捏合/缩放然后点击,它会再次起作用。它只是在使用按钮后无法立即工作。

另外,这里是按钮如何显示文本视图的代码:

- (void)textImageButtonAction:(id)sender
    if(self.textView.frame.origin.y < 0)
        [UIView beginAnimations:@"HideTabbar" context:nil];
        [UIView setAnimationDuration:.3];
            textView.frame = CGRectMake(0.0, 0.0, self.view.frame.size.width, footerStringSize.height +10);
        [UIView commitAnimations];
    
    else if(self.textView.frame.origin.y == 0) //If the textView is visible
        [UIView beginAnimations:@"HideTabbar" context:nil];
        [UIView setAnimationDuration:.3];
            textView.frame = CGRectMake(0, -footerStringSize.height -10, self.view.frame.size.width, footerStringSize.height +10);
        [UIView commitAnimations];
    
 

【问题讨论】:

该按钮用于在另一个滑入滑出的 subView 中显示/隐藏一些文本。 子视图如何显示和删除。这可能是你的问题。贴出代码。 我添加了上面的代码。我只是在编辑 textView 的框架。文本视图是在 viewDidLoad 方法中创建的。 【参考方案1】:

您是否应该在按钮完成其职责后辞去第一响应者的职务,以使按钮所在的视图不再受控制。

如何添加: 把SubviewtoFront:scrollview

到您的 UIButton 代码的末尾。这里的想法是让你的滚动视图成为最重要的视图;这就是我认为当您触摸滚动视图并因此重新激活手势识别器时发生的情况

【讨论】:

我也是这么想的。但它不起作用。我尝试添加 [textImageButton resignFirstResponder];在 textImageButtonAction 的末尾没有任何效果。 将子视图放在前面只是隐藏按钮并且不会重新激活手势识别器。我也试过打电话:[self scrollViewDidScroll:myScrollView];但这也不起作用。【参考方案2】:

你有没有试过打电话给[scrollView becomeFirstResponder]?那应该可以正常工作。

【讨论】:

是的,没有任何区别。不过感谢您的建议。 我在使用模态视图时遇到了类似的问题。您是否以模态方式呈现滚动视图?【参考方案3】:

我终于为此问题寻求 Apple 开发人员技术支持,他们查看了我的代码。问题的原因原来是不同类别中的手势识别器冲突。这是一个第一响应者问题,但由于某种原因,resignFirstResponder 和 becomeFirstResponder 没有任何效果。

我必须重新构建代码以及如何组织手势识别器以使其正常工作。

感谢大家的帮助。

【讨论】:

以上是关于为啥 UIButton 会覆盖 UITapGestureRecognizer?的主要内容,如果未能解决你的问题,请参考以下文章

UIButton圆角时为啥会有粗糙的黑边?

为啥我的 UIButton 会影响我在 Swift 中的 UIImageView?

为啥 UIView 的这些自动布局约束会阻止 UIButton 子视图接收触摸事件?

避免 UIPickerView ios 上的 UIButton 覆盖

如何将静态 UIButton 覆盖在 UITableView 上

如何将静态 UIButton 覆盖在 UITableView 上