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

iPhone-删除显示的视图控制器,iphone,ios,storyboard,Iphone,Ios,Storyboard,在视图控制器上,我有一个按钮,它将显示另一个视图控制器。从第二个视图控制器,我可以转到其他视图控制器,但不一定返回到让我来到这里的视图控制器。如果是这种情况,如何删除原始视图控制器?这取决于您实际如何显示当前视图控制器。 如果是modally,那么 [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 如果是使用导航控制器推送的: [self.navigationController

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

这取决于您实际如何显示当前视图控制器。 如果是modally,那么

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

[self.navigationController popViewControllerAnimated:YES];

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

  • 在导航控制器层次结构中移动
  • 断开导航控制器层次结构到另一个视图控制器
  • 只需将另一个视图控制器添加到导航控制器堆栈中的当前视图
  • 在第一种情况下,您可以使用UINavigationController的方法:

    - (UIViewController *)popViewControllerAnimated:(BOOL)animated
    - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
    - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
    
    并使用ViewController属性在堆栈中导航

    在第二种情况下,如果您想将层次结构完全分解为另一个视图控制器,则只需通过以下方式完成:

    [[[UIApplication sharedApplication] keyWindow].rootViewController dismissViewControllerAnimated:YES completion:nil];
    [[UIApplication sharedApplication] keyWindow].rootViewController = newController;
    
    或者更好:在第一行的完成块中添加第二行

    或者,在第三种情况下,如果您只想产生一个异常,但不想保留在导航控制器堆栈中,则使用以下方法:

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

    你能把你到目前为止试过的东西写出来吗。另外,您使用什么来加载视图控制器。是UINavigationController吗?你试过弹出视图控制器吗?对我来说似乎是个棘手的问题…请粘贴一些你迄今为止尝试过的代码…如果我使用dismissViewController或popViewController,这两个选项都不会带我到原始视图控制器吗?我正在寻找一种方法,如果可能的话,关闭初始视图控制器。那么您想删除根视图控制器,对吗?是的!这就是我想做的。