Master - Detail 项目未按预期工作

Master - Detail project not working as expected

将 xcode 中的默认项目用于主从应用程序,如果我在折叠委托中放置 print 调试语句,当我旋转设备时它似乎永远不会被触发(事实上,我永远无法触发它。

我编辑的部分代码在 AppDelegate.swift 中,看起来像这样

func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController:UIViewController, onto primaryViewController:UIViewController) -> Bool {

    print("XXXXXXX")

    guard let secondaryAsNavController = secondaryViewController as? UINavigationController else { return false }
    guard let topAsDetailController = secondaryAsNavController.topViewController as? DetailViewController else { return false }
    if topAsDetailController.detailItem == nil {
        // Return true to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return true
    }
    return false
}

如您所见,委托已根据默认项目正确设置:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    let splitViewController = self.window!.rootViewController as! UISplitViewController
    let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
    navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem
    splitViewController.delegate = self
    return true
}

与默认项目唯一不同的是我添加的 print("XXXXXXX") 行。

据我了解,当它折叠拆分视图时(即由于从横向到纵向的旋转),它应该调用此委托方法来确定要使用哪个详细视图...但是它从不调用该委托方法。

我只是不明白它是如何工作的还是默认项目本身坏了?

我的最终目标是让主视图(左侧)在详细视图将某个变量设置为 nil 时折叠时成为主视图。让这个(和其他委托方法)触发我猜是实现这个的第一阶段。

在 iPad 上的分屏多任务处理期间或在 iPhone 上使用分屏视图控制器时,在大小 class 发生变化期间调用有关 collapsing/expanding/separating 的委托方法。

Hiding/showing 主视图控制器是拆分视图控制器 displayMode 更改的结果,您可以在 splitViewController:willChangeToDisplayMode: 委托方法中对其做出反应。