添加SubView后,在SuperView中触摸

时间:2012-03-23 01:43:21

标签: objective-c ios

从XCode 4.2中的Single View iOS模板开始,我在我的.xib中添加了第二个视图,在主View上添加了一个'Super'按钮,在subView上添加了一个'Sub'按钮。我希望能够点击这两个按钮。

在视图控制器的界面中,我添加了:

IBOutlet UIView *subView;

然后在我的视图控制器的viewDidLoad方法中,我添加:

 [self.view addSubview:subView];
;

subView的背景为“clear”,两个窗口都设置为“User Interaction Enabled”。

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

2 个答案:

答案 0 :(得分:3)

这不是发生的事情,如果你把一个视图放在另一个视图之前,后面的视图将不会接触到。

您可以在前端视图中禁用用户互动,因此后视图将会接收到触摸。

但我认为您希望前视图和后视图可以点击,在这种情况下您需要做的是获取触摸并将其发送到后视图,并在后视图中处理它。

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

您可以在stackoverflow中查看此问题: 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];

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

答案 1 :(得分:0)

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

这比使用各种各样的触摸更容易/更容易,这变得有点噩梦。