UINavigationController:如何删除堆栈中的视图

8
假设这里是我的堆栈布局。
View3     --> Top of the stack
View2
View1
HomeView  --> Bottom of the stack

现在我在View3界面,如果我点击Home按钮,我想加载HomeView界面,这意味着我需要弹出View3View2View1界面。但是如果我弹出View3界面,View2将会被显示。我不想要那样的效果,我想删除View3View2View1界面,然后显示HomeView界面。有任何想法吗?

3个回答

16
你可以使用 popToRootViewControllerAnimated: 方法来回到根视图控制器。这会将堆栈中除根视图控制器外的所有视图控制器弹出。在你的情况下,这将是 HomeView
[self popToRootViewControllerAnimated:YES];


要到达堆栈中的特定视图,可以使用 popToViewController:animated:。假设你想从下往上弹出第三个视图控制器。在你的情况下,这将是 view2

NSArray* viewControllersInStack = self.navigationController.viewControllers;
UIViewController* targetViewController = [viewControllersInStack objectAtIndex:2];
[self.navigationController popToViewController:targetViewController animated:YES];

我在示例中将homeview作为根视图,但在我的代码中并非如此。非常感谢 :) - Thang Pham
我尝试了一下,但它说HomeView未定义,这很有道理,因为我在View3中,所以我没有对HomeView的引用,是这样吗? - Thang Pham
是的,您需要引用“HomeView”,您可以通过“self.navigationController.viewControllers”属性获得它。 - Ronnie Liew
我尝试设置引用,但它不起作用。通过任何数组访问它,这很混乱,因为您必须跟踪索引。请问您是否可以提供一些关于如何使用引用访问PopToViewController的示例代码? - Thang Pham

2

使用popToViewController函数。

[self.navigationController popToViewController:homeView animated:YES];

它是如何工作的?文档中说要弹出到特定的视图控制器,但我一直得到段错误。你能给我一个快速的示例代码吗? - Thang Pham
直到特定的视图控制器位于堆栈顶部,才弹出视图。你能同时发布一些错误日志和你的代码吗? - Bird
假设我现在在 aViewController 中(假设它已经在堆栈中),然后我推出了 bViewController,接着在 bViewController 中,我想要通过 popToViewController:aViewController 返回到 aViewController,但是它提示 aViewController 未定义,这很有道理,因为我现在在 bViewController 中,没有对 aViewController 的引用。我是否漏掉了什么? - Thang Pham
没错,就像@Ronnie Liew所说的那样。你需要一个引用。我通常将这项工作交给我的代表,他们拥有所有相关视图控制器的引用。您可以通过Protocol来实现这一点。(在您的情况下,请尝试使用“非正式”) - Bird

0

使用...

[self.navigationController popToRootViewControllerAnimated:YES];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接