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:
委托方法中对其做出反应。
将 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:
委托方法中对其做出反应。