【问题标题】:iPhone - Removing a presented view controlleriPhone - 删除呈现的视图控制器
【发布时间】:2013-08-14 11:16:07
【问题描述】:

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

【问题讨论】:

  • 您能否发布到目前为止您尝试过的代码。还有你用什么来加载视图控制器。是 UINavigationController 吗?你试过弹出视图控制器吗?
  • 对我来说似乎是个令人生厌的问题...请粘贴一些您迄今为止尝试过的代码...
  • 如果我使用dismissViewController 或popViewController,它们中的任何一个都不会带我到原来的视图控制器吗?如果可能的话,我正在寻找一种方法来关闭初始视图控制器。
  • 那么你想删除根视图控制器对吗?
  • 是的!这就是我想做的。

标签: iphone ios storyboard


【解决方案1】:

您的描述在这里有点不清楚。这里可能有 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

【讨论】:

    【解决方案2】:

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

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

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

    [self.navigationController popViewControllerAnimated:YES];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 2015-07-16
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多