【问题标题】:Storyboard - Pop to Root UIViewController Without UINavigationController?故事板 - 在没有 UINavigationController 的情况下弹出到根 UIViewController?
【发布时间】:2015-09-27 04:14:37
【问题描述】:

我有一个UIViewController 层次结构,它由一个根视图控制器组成,它连接到一个UITabBarController,它下面有几个UIViewControllers。每个标签UIViewControllers 都有自己的UINavigationController。没有共享的UINavigationController,也没有应用于根视图控制器。现在我有一种情况,我需要从标签UIViewControllers 之一一直弹回到根视图控制器。然而,由于根视图控制器和标签UIViewControllers 不共享一个共同的UINavigationController,我无法简单地调用[self.navigationController popToRootViewControllerAnimated:YES]。是否可以在没有共享的公共 UINavigationController 的情况下弹出到根视图控制器(或以编程方式将我的 Segue 展开回根)?

【问题讨论】:

  • 你所说的“根视图控制器”是导航控制器吗?或者它被一个作为它的根包含?标签栏vc是推送还是呈现?
  • 不,根视图控制器不是 UINavigationController。这是一个标准的 UIViewController。

标签: ios objective-c uiviewcontroller uinavigationcontroller storyboard


【解决方案1】:

我曾经遇到过类似的问题,试试这个

UIStoryboard *storyBrd = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *controller = nil;
controller = [storyBrd instantiateInitialViewController];
self.view.window.rootViewController = controller;

这个初始视图控制器是您的 RootViewController。否则你也可以使用方法

[storyBrd instantiateViewControllerWithIdentifier:<View Controller's Restoration ID>]

【讨论】:

    【解决方案2】:

    以下是我对vc安排的理解:

                                 |-navvc
                                 |   |--rootvc-(pushes)-stack...
    "root" vc-(presents)->tabvc--|    
                                 |-navvc
                                     |--rootvc-(pushes)-stack...
    

    只要您将把手握在正确的东西上,就很容易放松所有这些。选项卡中的导航 vcs 可以由其堆栈上的任何视图控制器使用self.navigationController 访问。

    您还需要在选项卡栏 vc 或您称为“root”vc 的那个上有所保留。您可以使用应用委托上的属性来安排。

    唯一要记住的另一个棘手的事情是,从“根”vc 到标签栏的转换是一个礼物,而不是一个推送,所以它必须通过关闭而不是弹出来撤消。为了在代码中表达这一点,假设您在应用程序委托上拥有标签栏 vc 的句柄....

    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    @property (strong, nonatomic) UITabBarController *tabBarVC;
    
    - (void)popEverything:(BOOL)animated;
    
    @end
    
    // AppDelegate.m
    
    // get the tab bars tabs (which are presumed to be navigation vcs)
    // dismiss the tab bar vc (which was presumed to be presented)
    // iterate the navigation vcs, popping all of them to root
    - (void)popEverything:(BOOL)animated {
        NSArray *viewControllers = self.tabBarVC.viewControllers;
        [self.tabBarVC dismissViewControllerAnimated:animated completion:^{
            for (UINavigationController *navVC in viewControllers) {
                [navVC popToRootViewControllerAnimated:animated];
            }
        }];
    }
    

    注意事项:仍然对您的 vc 安排有一些猜测,并且尚未测试上述内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-12
      • 2013-02-08
      • 1970-01-01
      • 2016-05-15
      • 2016-07-13
      • 2016-04-20
      • 2014-04-29
      • 2013-07-06
      相关资源
      最近更新 更多