3

我有一个使用故事板和导航控制器的应用程序。在我的应用程序流程的某个阶段,我在视图堆栈上获得了大约四个视图,此时我必须弹出所有视图,直到到达根视图。之后我需要手动推送另一个视图。

我尝试了各种没有运气的事情。我尝试使用内置 API 调用:

[self.navigationController popToRootViewControllerAnimated:YES];

此时,我尝试通过引用根视图并调用 segue 方法来调用 push segue。

RootView *obj = [[RootView alloc] init];
[obj callSegue];

或者

[self.navigationController performSegueWithIdentifier:@"pushView" sender:self];

无论如何,我完全被这个难住了。任何人都可以帮忙吗?

更新:

谢谢大家的回复。我正在挖掘更多并找到了一个解决方案,我确信这是其中之一。

// Reference to navigation controller. Apparently if you use self.navigationController in a popToRootViewController call it sets self.navigationController to nil.
UINavigationController *navigationController = self.navigationController;
[navigationController popToRootViewControllerAnimated:NO];

// Reference to view to push - must set storyboard ID in inspector
ViewToPush *viewRef = (ViewToPush *)[self.storyboard instantiateViewControllerWithIdentifier:@"gameView"];
[navigationController pushViewController:gameView animated:NO];
4

3 回答 3

2

这个怎么样?

[self.navigationController setViewControllers:@[rootViewController, viewControllerTwo] animated:YES];

这会将您的堆栈设置为您的根,并使用新的控制器和推送动画。如果您需要快速参考rootViewController,可以使用[[self.navigationController viewControllers] objectAtIndex:0].

于 2013-03-29T10:42:03.023 回答
1

一个很好的解决方案是使用“Unwind Segue”。基本上,展开转场是一种转场,它会将您带回推送的控制器堆栈,然后IBAction在目标控制器中执行一个方法。你想要做的是从你当前的控制器到根的展开segue,然后performSegueWithIdentifier:在被调用的方法中调用。

这里有一个关于 unwind segues 的教程:Tutorial

于 2013-03-29T10:47:16.930 回答
0

Meybe你可以试试这个:

  • @property在你的根 VC 中设置一个标志(a ),比如shouldPushAutomatically
  • 在您调用的 VC 中[self.navigationController popToRootViewControllerAnimated:YES];,实现该prepareForSegue:WithIdentifier:方法。在此方法中,使用(MyVC*)segue.destinationViewController访问您的根 VC 并将 yourflag 设置为YES.
  • viewDidLoad您的根 VC 中,尝试调用您的 push segue(实际上,您可能需要在 中调用它viewDidAppear)。

不确定这是否可行,但这就是我尝试使其发挥作用的方式。

于 2013-03-29T10:49:31.667 回答