2010-04-30 63 views
2

我创建了一个viewcontroller,显示一个按钮,用于将视图滑动到屏幕上。这个想法是在屏幕上放置三个这样的视图控制器,从而在屏幕底部提供导航的三个按钮。IPhone UIView:是否有可能仅在子视图上启用用户交互?

视图控制器堆叠起来,所以到顶端的一个现在覆盖其他视图,因此覆盖其他按钮。在这种情况下,只有顶级视图控制器的按钮正在工作,我希望这三个按钮都是可点击的。我试图禁用视图上的用户交互并仅在按钮上启用它,但它看起来像超级视图设置否决了子视图设置。

任何想法?

+1

我不是100%确定你正在尝试做什么,但听起来像是使用Tab Bar控制器或者presentModalViewController方法或者两者结合可能会更好?在一个屏幕上运行多个自定义视图控制器会导致代码混淆,并且有时会产生古怪的结果,Apple建议不要这样做。 – bpapa 2010-04-30 12:49:55

+0

这基本上就像使用tabbarcontrollor来呈现模态视图,它只是实际的按钮是(模态)视图控制器的一部分,而不是主屏幕 – Syg 2010-05-01 10:04:42

+0

也许你会更好地尝试定制一个TabBar控制器,看看你想如何。不知道它是如何可行的。 – Remover 2010-08-08 11:59:39

回答

1

您似乎混淆了视图及其控制器:viewControllers不是堆叠的,它们只是nib或xib文件的一部分。另一方面,视图可能是视图层次结构的一部分,在这种意义上可以相互覆盖。 viewController的功能是管理和协调屏幕上的各种视图。使用视图控制器来管理单个按钮效率不高:控制器的目的是促进各种按钮之间的通信(例如,当触摸第3号时禁用按钮1,2和4)。 @ bpapa的声明表示苹果公司不鼓励使用多个viewController,这是不正确的。 iOS的应用程序编程指南在本节Windows, Views, and View Controllers规定:

视图控制器直接管理一个单一的顶级视图,并可以管理全部或部分该视图的子视图。对于简单的用户界面,视图控制器通常管理其视图层次结构中的所有视图。但是,对于由多个不同部分组成的更复杂的界面,视图控制器可以管理一部分视图,并依靠一个或多个自定义控制器对象来管理视图层次结构中的其他视图组。未在文档明确,但已经咬了我好几次在过去几周

一件事是,制作的viewController的UIControl的行动目标只有有效果,如果是的viewController是文件的所有者的笔尖。比方说,你有一个有两个viewControllers,gameViewController和scoreViewController的笔尖。 gameView可能包含几个按钮,作为游戏块并触摸它们会向gameViewController的 - (void)pieceHasBeenTouched:(id)发送方方法发送操作消息。如果gameViewController是文件的所有者,这很好用。

现在看起来合乎逻辑的是,如果你在scoreView中有一个按钮,让它发送消息给scoreViewController,比如saveScore或类似的东西。由于我还不清楚的原因,响应者链不会让你。您需要使Score视图中的Save按钮将其操作消息发送到gameViewController。

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

+0

自从我问这个问题已经有一段时间了!也许我没有正确解释。我很清楚UIViews和他们各自的控制器之间的区别。这里的视图控制器不仅仅负责buttonpress动作,它们负责在视图中滑动覆盖层并管理内容(如contentview的大小颜色等)。所以它基本上是一个自定义的tabbarcontroller。 – Syg 2010-08-12 09:25:49

+0

不好意思在你的能力上施放灰烬,但是你的观点是什么?如果一切工作正常,首先问题不是很好,那么也许你应该删除它并缩短未回答列表。 – 2010-08-13 09:13:48

0

给你的代码添加到您的盛装UIViewhitTest:withEvent:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    UIView *hittedView = [super hitTest:point withEvent:event]; 
    return hittedView == self.button ? hittedView : nil; 
} 

我refered这样:UserInteraction enable for subview only。我测试了代码。它的工作原理!

相关问题