【问题标题】:UISplitViewController iOS8 PopToViewController programmaticallyUISplitViewController iOS8 PopToViewController 以编程方式
【发布时间】:2015-01-20 17:27:55
【问题描述】:

我在我的应用程序中使用 UISplitViewController 和 Size Classes。 我一直在 iPad 上显示 Master 和 Detail 控制器 (UISplitViewControllerDisplayModeAllVisible)

我按照这个出色的 SplitViewController tutorial 设置了我的故事板

所以我的应用支持 iOS 7 和 8。一切正常,但我在使用 iOS8 的 iPhone 上遇到了一个小问题:(这在 6+ 环境中当然不会发生)

我想以编程方式从细节控制器中显示主控制器。 我可以这样做:

[self showViewController:[self parentController] sender:self]; //Parent Controller is Master Controller

但这会导致主控制器被推到细节控制器的顶部,导致导航栏的后退按钮停止工作。

如果我使用:

[[self navigationController] popToViewController:[self parentController] animated:YES]; // This works on iPhones with iOS7

应用程序崩溃:'NSInternalInconsistencyException',原因:'无法获取弹出视图控制器。'(我也尝试了 popToRoot...没有任何反应。)

调试代码发现SplitViewController.viewControllers只返回一个NavigationController,里面有Detail控制器,所以Master不在Navigation Controller里面,也不是根。

但是如果我按下导航栏的后退按钮,它会弹出动画模拟 Master 是 root。

我假设这一切都与 iOS8 有关,并且对于 iPhone 6+,您可以在横向模式下同时看到 Master 和 Detail,因此操作系统不再将它们都保留在 NavigationController 中。

但我的问题是我如何以编程方式从 Detail 弹出到主控制器?

【问题讨论】:

    标签: objective-c xcode ios8 uisplitviewcontroller


    【解决方案1】:

    目前我用下面的代码解决了这个问题,但我很想知道是否有更好的方法来做到这一点。

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    
                    // iOS 8 and later only.
                    if (self.splitViewController) {
    
                        // If it's not an iPhone 6+ landscape.
                        if (self.traitCollection.horizontalSizeClass != UIUserInterfaceSizeClassRegular) {
                            UINavigationController *nav = self.splitViewController.viewControllers[0];
                            nav.viewControllers = [NSArray arrayWithObjects:self.parentController, self, nil];
                            [[self navigationController] popToViewController:[self parentController] animated:YES];
                        }
                    }
                    else {
                        [[self navigationController] popToViewController:[self parentController] animated:YES];
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      相关资源
      最近更新 更多