繁体   English   中英

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

[英]IPhone UIView:Is it possible to enable userinteraction only on subviews?

我创建了一个显示按钮的ViewController,该按钮用于将视图滑动到屏幕上。 这个想法是例如在屏幕上放置三个这样的视图控制器,从而在屏幕底部提供三个按钮来提供导航。

视图控制器堆叠在一起,因此最上面的一个现在覆盖了其他视图,因此覆盖了其他按钮。 在这种情况下,只有顶部viewcontroller的按钮起作用,在此情况下,我希望所有这三个按钮都可以单击。 我尝试在视图上禁用用户交互,仅在按钮上启用它,但是看起来超级视图设置取代了子视图设置。

有任何想法吗?

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

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

在文档中没有明确说明的一件事,但在过去的几周中让我很痛苦的一件事是, 只有当viewController是笔尖的文件所有者时, 才能将viewController作为UIControl操作的目标。 举例来说,您有一个笔尖,其中包含两个viewControllers,gameViewController和scoreViewController。 gameView可能包含充当游戏块的几个按钮,触摸它们会向gameViewController的-(void)pieceHasBeenTouched:(id)sender方法发送操作消息。 如果gameViewController是文件的所有者,这将非常有用。

现在看来,如果在scoreView中有一个按钮可以让它向scoreViewController发送消息,例如saveScore或类似的东西,似乎是合乎逻辑的。 由于某些原因,我还不太清楚,Responder链不会让您使用。 您需要使分数视图中的“保存”按钮将其操作消息发送到gameViewController。

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

将此添加到您的服装UIView代码: hitTest:withEvent:

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

我指的是: UserInteraction仅启用subview 我已经测试了代码。 而且有效!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM