中间视图控制器在解除模态视图然后弹出视图控制器后简要显示

时间:2012-12-16 06:30:41

标签: objective-c ios modal-dialog popviewcontrolleranimated

我有一个表视图控制器,A,它向视图控制器执行push segue,B。然后对视图控制器C执行模态segue。我在C上有一个按钮,需要导致解雇C(按照说明的模态)以及B的弹出以便我们返回A.在C中,我检测到按下按钮并使用委托回叫B然后使用此方法取消模态视图控制器C. :

[sender dismissViewControllerAnimated:NO completion:nil];
然后,

B使用委托来回调A,使用以下方法从堆栈中弹出B:

[self.navigationController popViewControllerAnimated:YES];

现在这一切都有效,除了在这一切中我简单地看到B的非常恼人的事实,而我希望能够从C直接回弹到A而根本没有看到B,无论如何。我已尝试上面的Animated参数的YES / NO组合,也试过popToRootViewControllerAnimated,但没有运气: - (

有人有什么想法吗?

4 个答案:

答案 0 :(得分:1)

我把一个快速的项目组合在一起,使用这段代码似乎对我很好:

[self dismissViewControllerAnimated:YES completion:nil];
// Just a coincidence that this is the presenting VC rather than a regular UIViewController I think. 
UINavigationController *navController = (UINavigationController *)self.presentingViewController;
[navController popViewControllerAnimated:NO];

这是Github上的示例项目:https://github.com/MaxGabriel/iOSNavigationFlow

答案 1 :(得分:0)

[self.navigationController popViewControllerAnimated:NO];

答案 2 :(得分:0)

您可以使用以下代码执行所需操作。首先,popToRootViewController将控制器B从堆栈中取出,但不会更改视图,因为C的视图已启动。然后在C的视图下添加导航控制器的视图,使其位于视图层次结构中,但不可见。然后你做一个动画将C的视图向右滑动,最后,你关闭模态视图控制器。我创建了一个属性nav,以使输入更短,但它并不是必需的。此代码位于模态视图控制器的.m

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.nav = (UINavigationController *)self.presentingViewController;
}

-(IBAction)goBackToRoot: (UIButton *) sender {
    [self.nav popToRootViewControllerAnimated:NO];
    [self.view.window insertSubview:self.nav.view belowSubview:self.view];
    [UIView animateWithDuration:.6 animations:^{
        self.view.frame = CGRectMake(330, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
    } completion:^(BOOL finished) {
        [self.nav dismissViewControllerAnimated:NO completion:nil];
    }];
}

答案 3 :(得分:0)

在iOS 6中,如果使用展开segues,则不会产生那种奇怪的效果。在要跳转到的视图控制器中,只需定义一个展开操作:

- (IBAction)home:(UIStoryboardSegue *)segue
{
    // if you need to do any UI update because we got an unwind segue
    // back to this controller, do that here
}

然后在你呈现的视图中,控制器(它可以是多个级别)可以通过从启动segue的按钮向下拖动到场景停靠栏中的“exit”图标来进行展开segue。它将自动通过,识别和呈现具有展开动作的视图控制器,并呈现这些选择。

净效果是您可以跳回多个模态和导航控制器,并且只能获得一个动画效果。

同样,这只是iOS 6+的遗憾。