iPhone - 移除已呈现的视图控制器

10
在一个视图控制器中,我有一个按钮,将呈现另一个视图控制器。从第二个视图控制器,我可以进入其他视图控制器,但不一定能回到带我来的那个视图控制器。如果是这种情况,如何删除原始的视图控制器?

你能否发布一下你目前尝试过的代码?另外,你使用什么来加载视图控制器?是UINavigationController吗?你尝试过弹出视图控制器吗? - Adam Richardson
这对我来说似乎是一个棘手的问题...请粘贴一些您已经尝试过的代码... - Master Stroke
如果我使用dismissViewController或popViewController,这两个方法都会带我回到原始视图控制器,对吗?如果可能的话,我正在寻找一种方法来关闭初始视图控制器。 - Carmichael
是的!那就是我想做的。 - Carmichael
我想要实现的应用程序流程让我考虑到这样的解决方案,因此我想根据我的目的地更改根视图控制器。 - Carmichael
显示剩余2条评论
2个回答

27

您的描述在这里有些不清楚。这里可能有3种不同的情况:

  1. 通过导航控制器层次结构移动
  2. 跳出导航控制器层次结构到另一个视图控制器
  3. 只是在导航控制器堆栈中添加另一个视图控制器

在第一种情况下,您可以使用UINavigationController的方法:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated

使用viewControllers属性浏览整个堆栈。

第二种情况,如果您想将层次结构分解为另一个完全不同的视图控制器,则只需执行以下操作:

[[[UIApplication sharedApplication] keyWindow].rootViewController dismissViewControllerAnimated:YES completion:nil];
[[UIApplication sharedApplication] keyWindow].rootViewController = newController;

或者更好的方式是:在第一行的完成块中添加第二行。

或者在第三种情况下,如果您只想要一种例外情况,但仍然保留在导航控制器堆栈中,则使用以下方法:

- (void)addChildViewController:(UIViewController *)childController
- (void)removeFromParentViewController

20
这取决于您实际呈现当前视图控制器的方式。如果是以模态方式呈现的,那么

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
如果它是使用导航控制器推送的:
[self.navigationController popViewControllerAnimated:YES];

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