没有EXC_BAD_ACCESS,无法使viewController透明

时间:2013-11-22 14:46:20

标签: ios iphone objective-c uiviewcontroller

我正在尝试制作一个小型演示应用程序,它应该同时显示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 显示。

我在那里,想知道如何做到这一点。任何帮助将不胜感激 ! :)

1 个答案:

答案 0 :(得分:3)

不要使用呈现视图控制器和添加子视图的组合。选择1.它应该是您选择的子视图。它可以由另一个控制器拥有,并且该控制器可能应该作为子视图控制器添加。

在第一种情况下,您会看到黑色,因为iOS正在从视图层次结构中删除(现在预计不可见)视图。所以你的观点是透明的,但你期望它背后的东西不再存在。

您的第二种情况可能只是导致某处的视图层次结构无效。

概览控制器不应该拥有基本控制器。应显示基本控制器,然后将概览控制器视图添加为子视图。