转到app中的第一个视图控制器

Sco*_*ttF 6 iphone xcode uinavigationcontroller ios

我需要转到我的应用中的第一个视图.我有几个视图被推入堆栈然后一个模态导航控制器和更多的视图推到它.

我遇到的问题是使用[[self navigationController] popToRootViewControllerAnimated:YES];只返回到模态堆栈中的第一个视图.

我无法开始[[self navigationController] popToViewController:..工作,因为真正的第一个视图控制器无法访问[[self navigationController] viewControllers].

有关如何实现这一目标的任何想法?谢谢.

dan*_*anh 6

做这个:

[[self navigationController] dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

这将使您回到模拟呈现导航控制器的VC.之后再往后走,取决于你如何在导航控制器之前推动那些"少量视图".

编辑 - 解释到最深的根...

听起来就像那些"少数几个视图"在另一个底层导航控制器的堆栈上.这可能有点棘手,因为在该堆栈中获得更远的干净方法是让底层导航控制器弹出它自己的根.但是怎么知道它上面的模态VC已经完成了呢?

让我们调用视图控制器来完成第二个导航控制器VC_a的模态演示.它是一个模态呈现的导航控制器,其最顶层的VC是VC_b.当VC_b以模态方式解散自己时,VC_a如何知道弹出它的导航根?

好的答案(通常)是VC_b决定解雇自己的原因 - 你的应用程序/模型中的某些条件已经改变,以使其决定完成.

我们也希望VC_a能够检测到这种情况.当VC_b被解雇时,VC_a会收到一条viewWillAppear消息,因为它即将被发现:

// VC_a.m

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];
    if (/* some app condition that's true when VC_b is done */) {
        // I must be appearing because VC_b is done, and I'm being uncovered
        // That means I'm done, too.  So pop...
        [self.navigationController popToRootViewControllerAnimated:NO];
    } else {
        // I must be appearing for the normal reason, because I was just pushed onto the stack
    }
}
Run Code Online (Sandbox Code Playgroud)