Master - 详细信息项目未按预期工作

时间:2016-10-28 16:41:25

标签: ios swift swift3 uisplitviewcontroller

使用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,则主视图(左侧)在崩溃时成为主视图。让这个(以及其他委托方法)触发我猜是实现这一目标的第一阶段。

1 个答案:

答案 0 :(得分:0)

在iPad上的分屏多任务处理期间或在iPhone上使用拆分视图控制器时,会发生有关折叠/扩展/分离的委托方法。

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