在添加子视图后获取超级视图

问题描述:

从XCode 4.2中的单视图iOS模板开始,我在.xib,主视图上的“超级”按钮和“Sub”按钮上添加了第二个视图子视图。我希望能够点击两个按钮。在添加子视图后获取超级视图

在视图控制器的接口,我说:

IBOutlet UIView *subView; 

然后在我的视图控制器的viewDidLoad方法,我补充一下:

[self.view addSubview:subView]; 

后[超级viewDidLoad中]

子视图具有“清除”的背景,并且两个窗口都设置为“用户交互启用”。

当我运行应用程序时,只有'Sub'按钮是可点击的。我可以看到'超级'按钮,但它似乎没有被接受,这应该是默认的行为,据我可以从苹果的文档中看出(视图的透明区域应该允许触摸通过)。

这不是什么情况,如果您将视图放在另一个视图的前面,后面的视图将不会收到触摸。

您可以在前视图中禁用用户交互,以便后视图将接收到该触摸。

但我认为你希望frontview和backview可以点击,你需要做什么在这种情况下是触摸并将其发送到backview,并在backview中处理它。

我不知道你在做什么,但我认为,你可能会做出最好的选择。

您可以在这里计算器来看看这个问题: detect touch on a view behind another view?

编辑:

你有很多选择送沾上。

你可以这样做(这是不是一个好的选择):

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ 
    for (UITouch *touch in touches) {   
     for(UIView* v in self.view.subviews){ 
      if([v pointInside:[touch locationInView:self.view] withEvent:event]){ 
       if ([v isKindOfClass:[UIButton class]]) { 
        [(UIButton*)v sendActionsForControlEvents:UIControlEventTouchUpInside]; 
       } 

      } 
     } 
    }  
} 

您也可以编辑视图框架,使视图将不包括按钮。

您也可以为您带来按钮,将新子视图前做这样的事情:

[self.view addSubview:yourSubview]; 
[self.view bringSubviewToFront:yourButton]; 

你只需要使用你的创造力;)

是你的第二个观点的内容的大小(按钮)还是整个视图的大小?您可能会发现,使您的子视图成为对象的大小更容易,而不是320x480。然后将它作为子视图添加后通过cgrectmake对齐。

这是/路/比冒泡的各种触摸,它变得有点一场噩梦更容易。

+0

这是整个视图的大小。对于这个项目来说,使它成为一个小视图将起作用,但我很乐意学习如何正确地将触摸吹到全屏幕上。 – 2012-03-23 23:30:41