为什么UIButton会覆盖UITapGestureRecognizer?

时间:2010-09-30 23:41:49

标签: iphone objective-c uiview uibutton

我有一个带有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];
    }
 }

3 个答案:

答案 0 :(得分:1)

按钮完成任务后,您是否应该先退出第一响应者,以便按钮所在的视图不再受控制。

如何添加: bringSubviewtoFront:滚动视图

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

答案 1 :(得分:1)

您是否尝试过致电[scrollView becomeFirstResponder]?这应该有效。

答案 2 :(得分:0)

我终于找到了Apple Developer Tech Support来解决这个问题,他们查看了我的代码。问题的原因结果是不同类别中的冲突手势识别器。这是第一个响应者问题,但由于某种原因,resignFirstResponder和becomeFirstResponder没有任何影响。

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

感谢大家的帮助。