Swift:以编程方式为SplitViewController分配主从VC

时间:2018-07-11 13:03:23

标签: swift

我试图将SplitViewController放在我在didFinishLaunchingWithOptions中启动的customTabBarController中。

我的实现遇到的麻烦是masterVC和detailVC的启动顺序错误。如何分配哪个是masterVC,哪个是detailVC。尽管交换了viewControllers数组,我的实现仍将detailVC设置为masterVC。我以编程方式工作,没有情节提要。

我的实现方式

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()

    window?.rootViewController = CustomTabBarController()
    return true
}

class CustomTabBarController: UITabBarController, UISplitViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        let secondTab = UINavigationController(rootViewController: ViewController())
        secondTab.tabBarItem.title = "SecondTab"

        let splitVC = UISplitViewController()
        let masterVC = TableViewController()
        let detailVC = DisplayDetailViewController()
        let nc1 = UINavigationController(rootViewController: masterVC)
        let nc2 = UINavigationController(rootViewController: detailVC)

        splitVC.viewControllers = [nc1, nc2]
        splitVC.preferredDisplayMode = .allVisible
        splitVC.tabBarItem.title = "SplitView"
        splitVC.delegate = self

        viewControllers = [splitVC, secondTab]

    }
}

上述实现产生以下结果:

在纵向模式下启动时,显示的第一个VC是detailVC,而应该是masterVC。 enter image description here

以横向模式启动时,顺序正确,即左侧的masterVC,右侧的detailVC。 enter image description here 如何使masterVC在纵向模式下启动时首先出现?有没有办法强制将masterVC分配为“主”视图?

0 个答案:

没有答案