我有这个导航堆栈

RootVC ---> VC1->(演示)-> ModalVC

而且我有VC2(不在导航堆栈中)。

在介绍ModalVC时,我想单击ModalVC中的按钮以关闭ModalVC,然后单击VC1之后将VC2推入导航堆栈。它看起来应该像这样:

RootVC ---> VC1 ---> VC2

我尝试了很多方法来实现它,但是当我返回到RootVC时,仅推送事件触发。

我试图与代表们做到这一点:

在ModalVC上单击:

[self dismissViewControllerAnimated:YES completion:^{
   if ([self.delegate respondsToSelector:@selector(dismissAndPush:)]) {
       [self.delegate performSelector:@selector(dismissAndPush:) withObject:VC2];
   }
}];


在VC1中:

- (void)dismissAndPush:(UIViewController *)vc {
    [self.navigationController pushViewController:vc animated:NO];

}


请帮助了解这种行为。我的错误在哪里?

最佳答案

发生了其他错误。如果我没看错:在解散显示的视图控制器之前,某些动画正在阻止导航堆栈中的动画。我用两种方法解决了这个问题:

1)在解雇前删除或设置正确的动画

2)在导航控制器中使用setViewControllers(我选择了它)

- (void)dismissAndPush:(UIViewController *)vc {
    [self dismissViewControllerAnimated:NO completion:^{
        NSMutableArray *mutableControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
        NSArray *controllers = [mutableControllers arrayByAddingObject:vc];
        [self.navigationController setViewControllers:controllers animated:NO];
    }];

}

07-24 14:07