2014-02-19 51 views
1

我有一个视图控制器,它包含一个滚动视图,它占用了整个可用的窗口。有一个UIView作为容器视图使用,它是scrollview的子视图,并包含所有其他视图和控件。当视图控制器初始化时,有很多配置会根据Web服务的数据来显示哪些视图和控件。iOS按钮嵌套在视图中没有接收到触摸

附加到视图控制器的主视图是一个轻击手势识别器。我发现我需要检查[触摸视图]以查看它是否是按钮或我不希望手势识别器解释的任何其他控件,并且将一个NO值从

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)触摸,如果它是这些控制的一次

委托方法。

所以在这个容器视图是另一个(UIView)子视图,并在该子视图中是一个按钮。视图控制器是导航控制器堆栈的一部分,并且当这仅作为导航控制器呈现时,它们都可以很好地工作。

当导航控制器显示在标签栏的一个标签上时,那么当我点击按钮时,它不会识别该按钮上的轻击。当我在上面的委托方法中断时,[touch view]是UIView,而不是UIButton。

如果我按住按钮一秒左右,那么它确实识别按钮,并将消息转发到按钮。

对此有何看法?我可以发布代码,只是不知道要发布什么...

+0

找到它。容器视图具有灵活的高度自动调整掩码集,因此由于选项卡栏而被设置为较小的高度。 – mickm

回答

4

也许按钮超出其包含视图的范围?如果没有设置clipsToBounds,该按钮仍然会出现,但由于它超出了其超视图范围,因此它不会响应触摸。

另一种可能性是另一个视图重叠按钮。如果重叠视图具有透明背景,您将无法看到重叠的位置,但它可能会从其下面的视图中窃取触摸事件。

任何时候我有很多嵌套视图,我发现最简单的方法来看看发生了什么是暂时将每个视图的backgroundColor设置为不同的颜色。通过这种方式,我可以准确地看到每个视图的界限,它们是如何嵌套的,以及什么是重叠的。

+0

是的,你明白了。看到我上面的评论... – mickm

+0

在我的情况下,这是第一个案件。多谢兄弟。从2Hrs开始抓头了。我完全忘了clipToBounds的事情。 :) – PrafulD

相关问题