我正在尝试制作一个小型演示应用程序,它应该同时显示2个视图:
- The first one, BaseViewController, is a classic controller with 2 buttons
- The second one, OverViewController, is launch on top of baseView and contains
a last button, and is supposed to be transparent and sending the touch controls
to the first one
viewController都有自己的xib。为了说清楚:rootView - > baseView + overView(透明)
我的问题是不将控制事件从第二个视图发送到第一个视图,但要使第二个视图透明且功能正常。
这是我到目前为止所尝试的内容:
1)------------呈现两个视图控制器------------
从应用 rootViewController :
- (IBAction)buttonClicked:(id)sender
{
OverViewController *overVC = [[OverViewController alloc] init];
[overVC presentViewControllerFrom:self];
}
来自 OverViewController :
- (id)init
{
self = [super init];
if (self)
{
self.base = [[BaseViewController alloc] initWithNibName:@"BaseViewController" bundle:nil];
}
return self;
}
我制作了一个自定义方法,让overView在显示之前呈现baseView。
- (void)presentViewControllerFrom:(RootViewController *)sender
{
[sender presentViewController:self.base animated:NO completion:nil];
self.view.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.0];
self.view.opaque = NO;
[self.base presentViewController:self animated:YES completion:nil];
}
此时,出现baseView,然后是overView。 overView按钮正常工作。好极了!但是后来overView的背景并没有显示出什么应该落后并保持黑色。没有alpha透明度。
2)------------呈现baseView并将overView添加为子视图------------
从应用 rootViewController (与之前相同):
- (IBAction)buttonClicked:(id)sender
{
OverViewController *overVC = [[OverViewController alloc] init];
[overVC presentViewControllerFrom:self];
}
来自 OverViewController (不提供,但添加子视图):
- (void)presentViewControllerFrom:(RootViewController *)sender
{
[sender presentViewController:self.base animated:NO completion:nil];
self.view.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.0];
self.view.opaque = NO;
[self.base.view addSubview:self.view];
}
这一次,透明度非常好,但是对overView按钮的任何触摸都会导致 EXC_BAD_ACCESS 显示。
我在那里,想知道如何做到这一点。任何帮助将不胜感激 ! :)
答案 0 :(得分:3)
不要使用呈现视图控制器和添加子视图的组合。选择1.它应该是您选择的子视图。它可以由另一个控制器拥有,并且该控制器可能应该作为子视图控制器添加。
在第一种情况下,您会看到黑色,因为iOS正在从视图层次结构中删除(现在预计不可见)视图。所以你的观点是透明的,但你期望它背后的东西不再存在。
您的第二种情况可能只是导致某处的视图层次结构无效。
概览控制器不应该拥有基本控制器。应显示基本控制器,然后将概览控制器视图添加为子视图。