6

我需要转到我的应用程序中的第一个视图。我有一些视图被推送到堆栈上,然后是一个模态导航控制器,还有更多视图被推送到它上面。

我遇到的问题是 using[[self navigationController] popToRootViewControllerAnimated:YES];只能回到模态堆栈中的第一个视图。

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

关于如何做到这一点的任何想法?谢谢。

4

4 回答 4

6

做这个:

[[self navigationController] dismissModalViewControllerAnimated:YES];

这将使您回到模态显示导航控制器的 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
    }
}
于 2012-04-13T21:16:37.733 回答
0

您需要使用委托模式来做到这一点。具体来说,通过创建一个实现委托respondsToSelector方法的协议。

有关完整的详细信息,请参阅此帖子。它应该几乎正是您正在寻找的。我必须做类似的事情,除了我只需要从导航堆栈中弹出一个视图而不是使用popToRootViewControllerAnimated:.

于 2012-04-13T21:35:43.570 回答
0

在 AppDelegate.m 类中创建具有波纹管流程的方法...

-(void)MethodName{//your method name
    YourViewController *objViewController = [[[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil] autorelease]; ///define your viewcontroller name like "FirstViewController" 
    UINavigationController *yourNavigationController = [[[UINavigationController alloc] initWithRootViewController:objViewController] autorelease];

    self.window.rootViewController = yourNavigationController;
}

当您想在 firstview 上重定向时,只需从 appdelegate 对象调用此方法....

于 2012-04-14T12:30:35.200 回答
0

对于 iOS6...

[self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
于 2015-08-18T22:15:50.910 回答