IPhone UIView:是否可以仅在子视图上启用用户交互?

时间:2010-04-30 11:41:19

标签: iphone uiview uibutton viewcontroller

我创建了一个viewcontroller,它显示一个用于将视图滑动到屏幕上的按钮。我的想法是在屏幕上放置三个这样的视图控制器,导致屏幕底部有三个按钮提供导航。

视图控制器被堆叠,因此顶部的视图控制器现在覆盖其他视图,因此覆盖其他按钮。在这种情况下,只有顶部viewcontroller的按钮正在工作,我希望它们中的所有三个都是可点击的。我尝试在视图上禁用userinteraction并仅在按钮上启用它,但看起来超级视图设置优先于子视图设置。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您似乎混淆了视图及其控制器:viewControllers没有堆叠,它们只是nib或xib文件的一部分。另一方面,视图可以是视图层次结构的一部分,并且在这种意义上可以彼此重叠。 viewController的功能是管理和协调屏幕上的各种视图。使用视图控制器来管理单个按钮效率不高:控制器的目的是促进各种按钮之间的通信(例如,当触摸数字3时,禁用按钮1,2和4)。 @ bpapa声明Apple不鼓励使用多个viewController不再正确。 iOs应用程序编程指南中的本节Windows, Views, and View Controllers指出:

  

视图控制器直接管理单个顶级视图,并可管理该视图的全部或部分子视图。对于简单的用户界面,视图控制器通常管理其视图层次结构中的所有视图。但是,对于由多个不同部分组成的更复杂的接口,视图控制器可以管理视图的子集,并依赖一个或多个自定义控制器对象来管理视图层次结构中的其他视图组。

有些事情在文档中没有说清楚,但是在过去的几周里我曾多次咬过我的想法是,如果viewController是的话,那么使viewController成为UIControl动作 的目标会有效文件的笔尖所有者。比如说,你有一个带有两个viewControllers,gameViewController和scoreViewController的笔尖。 gameView可能包含几个作为游戏片段的按钮,触摸它们会向gameViewController发送动作消息 - (void)pieceHasBeenTouched:(id)sender方法。如果gameViewController是文件的所有者,那么这很有用。

现在看来,如果你在scoreView中有一个按钮让它向scoreViewController发送一条消息,比如saveScore或类似的东西,那么这似乎是合乎逻辑的。由于我还不太清楚的原因,Responder连锁店不会让你。您需要使得分数视图中的“保存”按钮将其动作消息发送到gameViewController。

我通过在两个控制器之间建立IBOutlet绑定来解决这个问题 - 通知是另一种可能性。

答案 1 :(得分:0)

将此代码添加到您的代码中[{1}}:hitTest:withEvent:

UIView

我参考了这个:UserInteraction enable for subview only。我已经测试了代码。它有效!