容器视图内的按钮不起作用。

4

我是一个完全的iOS应用程序开发新手,目前正在开发一个应用。

我已经设置了我的storyboard,其中包括一个HomeViewController(主视图控制器),以及一个容器视图,内嵌另一个视图控制器。这个子视图控制器超出了视图的范围,在我的HomeViewController中点击一个按钮时,它会以很酷的动画效果被移动到应用程序的顶部,显示这个子视图。一切都很正常。

在我的子视图控制器中,我只有3个按钮,当它们以这种小动画的方式显示在屏幕上时,它们是无法使用的。它们不会触发按钮被按下的操作,也不会像iOS样式一样“高亮”显示。什么都没有发生。

我已经搜索了很多关于这个问题的内容,尝试了在父视图控制器上使用addChildViewController(),在子视图控制器上使用didMove(toParentViewController: UIViewController),并且还进行了编程添加。当通过编程添加时,它可以正常工作,但是该视图不遵循动画效果,只是在屏幕上显示而不是跟随父容器一起移动。

接下来我该怎么做?

非常感谢。

编辑:我的问题似乎不是UIView animations canceling any touch input的重复。

我正在使用Spring库进行动画。此外,在那个线程中,他们谈论用户交互在动画未完成时被阻止。这不是我的情况。当尝试按钮交互时,动画已经完美地完成了。


不是这样。我已经编辑过来解释为什么不是这种情况。 - Jorge
3个回答

10

从我的经验来看,导致此行为的两个问题最常见:

  1. 您的某些容器视图设置了 userInteractionEnabledfalse,或者
  2. 您的容器视图框架很小,并且您正在尝试点击容器框架之外的按钮,这将无法工作。想象一下这是一个到按钮的窗口,有一个隐形的墙挡住了触摸。

这两个问题最好使用 Xcode 调试视图层次结构进行调试,或者您也可以尝试使用 Reveal 应用程序查看发生了什么。


第一个解决方案不是问题。我已经检查了一百次,我试图交互的所有内容都具有“userInteractionEnabled”。事实上,在观看您的答案时,我又检查了一次。我认为第二个也不是问题,因为它几乎占据整个屏幕的适当大小。也许当我让动画在屏幕上显示容器时,我移动了另一层,并且按钮层从未到达屏幕? - Jorge
你的视图层级中是否有一个ScrollView? - Adis
不,先生!我已经添加了另一个带有按钮的测试容器,并且它完美地工作。我认为它不起作用是因为最初超出了视图的范围。这可能吗?我对此感到非常疯狂 :( - Jorge
你正在制作什么动画?是变换、约束还是帧动画?制作变换动画可能会产生这样的行为。 - Adis
我真的不知道 :/ 我正在使用Spring动画库。我只是对整个视图进行动画处理,其中包含容器视图。然而,我正在缩小问题范围。如果我将容器视图放在视图之外,也就是主视图的根部,这种错误行为就不会发生。但是这样我就无法将其限制在屏幕外并通过包装器视图移动它。嗯…… - Jorge
是的 :) 将您的评论添加为答案。非常感谢! - Jorge

0

最后,这种不良行为是因为我的容器中的包装视图比容器小,但由于这两个都在屏幕外,我一开始没有意识到。将包装视图足够大以适应子容器是解决方案。

很抱歉,最后这是一个愚蠢的问题。

谢谢大家。


-1
如果你使用自动布局,你需要检查你的约束是否正确。特别是对于biggerOrEqual和smallerOrEqual的约束,仍然需要一个具体的约束。例如:
width = 100@750
width <= superView.width@999
你不应该忘记第一个约束。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接