使用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,则主视图(左侧)在崩溃时成为主视图。让这个(以及其他委托方法)触发我猜是实现这一目标的第一阶段。
答案 0 :(得分:0)
在iPad上的分屏多任务处理期间或在iPhone上使用拆分视图控制器时,会发生有关折叠/扩展/分离的委托方法。
隐藏/显示主视图控制器是拆分视图控制器displayMode
更改的结果,您可以在splitViewController:willChangeToDisplayMode:
委托方法中对此做出反应。