在添加子视图后获取超级视图
问题描述:
从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对齐。
这是/路/比冒泡的各种触摸,它变得有点一场噩梦更容易。
这是整个视图的大小。对于这个项目来说,使它成为一个小视图将起作用,但我很乐意学习如何正确地将触摸吹到全屏幕上。 – 2012-03-23 23:30:41