iPhone - 删除显示的视图控制器

时间:2013-08-14 11:16:08

标签: iphone ios storyboard

在视图控制器上,我有一个按钮,它将显示另一个视图控制器。从第二个视图控制器,我可以转到其他视图控制器,但不一定回到让我在这里的那个。如果是这种情况,我该如何删除原始视图控制器?

2 个答案:

答案 0 :(得分:26)

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

  1. 浏览导航控制器层次结构
  2. 将导航控制器层次结构分解为另一个视图控制器
  3. 只需将另一个视图控制器添加到导航控制器堆栈中的当前视图
  4. 在第一种情况下,您可以使用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
    

答案 1 :(得分:18)

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

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

如果是使用导航控制器推送的话:

[self.navigationController popViewControllerAnimated:YES];