Cocoa touch 强制UISplitViewController(通过编程使其成为rootViewController)在Swift中从iPhone上的主视图开始

Cocoa touch 强制UISplitViewController(通过编程使其成为rootViewController)在Swift中从iPhone上的主视图开始,cocoa-touch,ios-universal-app,uisplitview,Cocoa Touch,Ios Universal App,Uisplitview,我有一个通用应用程序,它使用两个不同的UISplitview控制器来控制两个不同的主/详细信息集(一个数据类型嵌套在另一个数据类型中) 我通过调用以下函数从第一个切换到另一个: @IBAction func viewEntries(sender: AnyObject) { let storyboard = UIStoryboard(name: "Main", bundle: nil) let entriesSplitView = storyboard.instantiateVi

我有一个通用应用程序,它使用两个不同的UISplitview控制器来控制两个不同的主/详细信息集(一个数据类型嵌套在另一个数据类型中)

我通过调用以下函数从第一个切换到另一个:

@IBAction func viewEntries(sender: AnyObject) {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let entriesSplitView = storyboard.instantiateViewControllerWithIdentifier("entriesSplitView") as! UISplitViewController
    entriesSplitView.delegate = self.appDelegate
    UIView.transitionWithView(self.view.window!, duration: 0.25, options: .TransitionCrossDissolve, animations:
        {
            self.appDelegate.window?.rootViewController = entriesSplitView

        }, completion: nil)

}
在这个辅助UISplitView的主视图控制器中,我设置了导航控制器的leftBarButton以触发一个类似的函数,以返回到原始的、最顶级的UISplitView

我唯一的问题是,我想确保在iPhone上,此转换后显示的第一个视图是“细节视图”控制器,但我希望首先显示“主视图”控制器,然后才能查看细节。我可以通过添加以下内容来解决此问题:

       let masterNavigationController = entriesSplitView.viewControllers[0] as! UINavigationController
       masterNavigationController.popToRootViewControllerAnimated(false)
在self.appDelegate.window?.rootViewController=entriesSplitView之后,但当我这样做时,会快速闪烁。如果我把它放在那个电话之前,它就没有预期的效果


关于如何确保主视图是最初调用的视图,同时还允许访问详细视图的正确方法,您有什么想法吗?

我认为UISplitViewControllerDelegate是您的朋友

使根视图控制器成为拆分视图控制器的代理:

self.splitViewController?.delegate = self
然后执行以下方法:

extension MyViewController : UISplitViewControllerDelegate {
    func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
        return true
    }
}

这将强制拆分视图控制器在水平紧凑的环境中默认显示主视图。您可能需要在函数体中使用自定义逻辑来为您的应用程序创建所需的效果,但这正是实现此目的的地方。

为什么不将masterNavigationController设置为rootViewController?我已经尝试过了,但效果不好。它在分割视图中的包装方式就是这样……细节视图控制器没有它应该具有的导航控制器元素,并且主视图在屏幕上的安装方式不正确。顺便说一句,我在IB中为辅助UIPKITVIEWCONTROLLER及其子级设置的内容与苹果提供的主/详细模板相同。