在主VC EXC_BAD_ACCESS之上添加UIViewController作为容器

时间:2014-07-13 13:16:52

标签: ios objective-c uiview uiviewcontroller

是否可以在当前UIViewController之上的UIView中呈现UIViewController?我已经完成了交换视图控制器,但是当我尝试这样做时,在多次呈现和删除UIView然后单击主VC表之后出现错误。这是我点击导航栏按钮时的内容:

- (void)composeMessage:(id)sender{
    if (_container.frame.origin.x != 350) {
         [self.view endEditing:YES];
        [UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
            [_container setFrame:CGRectMake(350, 0, self.view.frame.size.width, self.view.frame.size.height)];
        }completion:^(BOOL finished){
            [_CFVC removeFromParentViewController];
        }];
    }else {
        _CFVC = [[CFVC alloc]init];
        [_CFVC willMoveToParentViewController:self];
        __weak typeof(self) weakself = self;
        _CFVC.composeTo = ^(NSString *response) {
            __strong typeof(self) strongself = weakself;
            [strongself newMessage:response];
        };
        [self addChildViewController:_CFVC];
        _CFVC.view.frame = _container.bounds;
        [_container addSubview:_CFVC.view];
        [UIView animateWithDuration:0.2 delay:0.05 options:UIViewAnimationOptionCurveLinear animations:^{
            [_container setFrame:self.view.bounds];
        }completion:^(BOOL finished){
            [_CFVC didMoveToParentViewController:self];
        }];
    }
}

当进出VC交换时,从我看过的例子中,必须从parentViewController中删除一个VC。我是否应该在使用第二个VC添加_container视图之前删除主VC,然后将其添加回来?

更新:

删除[_CFVC removeFromParentViewController];后,我不再收到错误消息。由于我添加了一个子视图,我不应该在它离开屏幕时将其删除吗?删除removeFromParentViewController是否有任何问题?

UPDATE2:

此外,我将第二个VC的初始化移动到viewDidLoad方法,然后重新插入removeFromParentViewController ...并且没有错误......

2 个答案:

答案 0 :(得分:0)

您尝试过以下方法吗?而不是手动创建UIView并向其添加视图控制器,以下方法为您做到了

 presentViewController:animated:completion:

答案 1 :(得分:0)

此调用" [_ CFVC removeFromParentViewController];"是需要的,在此之前你需要删除它的视图,它也被添加为_container的子视图。也可以调用[_CFVC.view removefromsuperview]。 而不是显式设置框架 - _CFVC.view.frame = _container.bounds; 您可以在使用initWithFrame创建_CFVC时创建它:。