|
|
|
@ -23,18 +23,65 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate, UISplitViewControllerDe |
|
|
|
} |
|
|
|
|
|
|
|
private func setupSplitViewController() { |
|
|
|
guard let split = window?.rootViewController as? UISplitViewController else { return } |
|
|
|
guard let storyboardSplit = window?.rootViewController as? UISplitViewController else { return } |
|
|
|
let split = installModernSplitViewIfNeeded(storyboardSplit) |
|
|
|
|
|
|
|
let detailNav = split.viewControllers[split.viewControllers.count - 1] as! UINavigationController |
|
|
|
detailNav.topViewController!.navigationItem.leftBarButtonItem = split.displayModeButtonItem |
|
|
|
configureSplitViewDisplay(split) |
|
|
|
split.delegate = self |
|
|
|
|
|
|
|
let masterNav = split.viewControllers[0] as! UINavigationController |
|
|
|
let controller = masterNav.topViewController as! MasterViewController |
|
|
|
let detailNav = detailNavigationController(in: split) |
|
|
|
detailNav?.topViewController?.navigationItem.leftBarButtonItem = nil |
|
|
|
|
|
|
|
guard let masterNav = masterNavigationController(in: split), |
|
|
|
let controller = masterNav.topViewController as? MasterViewController else { return } |
|
|
|
controller.delegate = NetworkDelegate() |
|
|
|
controller.model.items = LocalManager.sharedInstance.model!.items |
|
|
|
} |
|
|
|
|
|
|
|
private func installModernSplitViewIfNeeded(_ split: UISplitViewController) -> UISplitViewController { |
|
|
|
guard split.style == .unspecified, |
|
|
|
let primary = split.viewControllers.first, |
|
|
|
let secondary = split.viewControllers.last else { |
|
|
|
return split |
|
|
|
} |
|
|
|
|
|
|
|
let modernSplit = UISplitViewController(style: .doubleColumn) |
|
|
|
modernSplit.setViewController(primary, for: .primary) |
|
|
|
modernSplit.setViewController(secondary, for: .secondary) |
|
|
|
window?.rootViewController = modernSplit |
|
|
|
return modernSplit |
|
|
|
} |
|
|
|
|
|
|
|
private func configureSplitViewDisplay(_ split: UISplitViewController) { |
|
|
|
split.minimumPrimaryColumnWidth = 280 |
|
|
|
split.maximumPrimaryColumnWidth = 380 |
|
|
|
split.preferredPrimaryColumnWidthFraction = 0.30 |
|
|
|
|
|
|
|
guard UIDevice.current.userInterfaceIdiom == .pad else { |
|
|
|
split.preferredDisplayMode = .automatic |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
split.preferredSplitBehavior = .tile |
|
|
|
split.preferredDisplayMode = .oneBesideSecondary |
|
|
|
} |
|
|
|
|
|
|
|
private func masterNavigationController(in split: UISplitViewController) -> UINavigationController? { |
|
|
|
if split.style == .doubleColumn { |
|
|
|
return split.viewController(for: .primary) as? UINavigationController |
|
|
|
} |
|
|
|
|
|
|
|
return split.viewControllers.first as? UINavigationController |
|
|
|
} |
|
|
|
|
|
|
|
private func detailNavigationController(in split: UISplitViewController) -> UINavigationController? { |
|
|
|
if split.style == .doubleColumn { |
|
|
|
return split.viewController(for: .secondary) as? UINavigationController |
|
|
|
} |
|
|
|
|
|
|
|
return split.viewControllers.last as? UINavigationController |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: - Split view |
|
|
|
|
|
|
|
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool { |
|
|
|
@ -45,4 +92,14 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate, UISplitViewControllerDe |
|
|
|
} |
|
|
|
return false |
|
|
|
} |
|
|
|
|
|
|
|
func splitViewController(_ svc: UISplitViewController, displayModeForExpandingToProposedDisplayMode proposedDisplayMode: UISplitViewController.DisplayMode) -> UISplitViewController.DisplayMode { |
|
|
|
configureSplitViewDisplay(svc) |
|
|
|
|
|
|
|
if UIDevice.current.userInterfaceIdiom == .pad { |
|
|
|
return .oneBesideSecondary |
|
|
|
} |
|
|
|
|
|
|
|
return proposedDisplayMode |
|
|
|
} |
|
|
|
} |