From b973ccf3f1c46870375df3d86e6d8c4336f4b324 Mon Sep 17 00:00:00 2001 From: Fin Date: Tue, 20 Aug 2024 15:54:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=20iOS14=20=E4=B8=8A=E4=BD=BF=E7=94=A8?= =?UTF-8?q?BarkSplitViewController=EF=BC=8CiOS13=E4=BD=BF=E7=94=A8=20UITab?= =?UTF-8?q?BarController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bark/AppDelegate.swift | 4 +-- Controller/BarkSplitViewController.swift | 32 +++++---------------- Controller/SectionViewController-iPad.swift | 19 +++++++----- 3 files changed, 21 insertions(+), 34 deletions(-) diff --git a/Bark/AppDelegate.swift b/Bark/AppDelegate.swift index 9331663..4c86942 100644 --- a/Bark/AppDelegate.swift +++ b/Bark/AppDelegate.swift @@ -78,8 +78,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD setupRealm() IQKeyboardManager.shared.enable = true - if UIDevice.current.userInterfaceIdiom == .pad { - let splitViewController = BarkSplitViewController() + if #available(iOS 14, *), UIDevice.current.userInterfaceIdiom == .pad { + let splitViewController = BarkSplitViewController(style: .doubleColumn) splitViewController.initViewControllers() self.window?.rootViewController = BarkSnackbarController(rootViewController: splitViewController) } else { diff --git a/Controller/BarkSplitViewController.swift b/Controller/BarkSplitViewController.swift index c68b82c..d2c11e2 100644 --- a/Controller/BarkSplitViewController.swift +++ b/Controller/BarkSplitViewController.swift @@ -9,21 +9,9 @@ import Material import UIKit +@available(iOS 14, *) class BarkSplitViewController: UISplitViewController { - override func viewDidLoad() { - super.viewDidLoad() - // 暂时没找到 oneOverSecondary 模式下,怎么显示左侧导航栏按钮 - // 先强制显示 primary 吧 - self.preferredDisplayMode = .oneBesideSecondary - self.delegate = self - } - - let sectionViewController = BarkNavigationController( - rootViewController: SectionViewController_iPad(viewModel: SectionViewModel()) - ) - let homeViewController = BarkNavigationController( - rootViewController: HomeViewController(viewModel: HomeViewModel()) - ) + let sectionViewController = SectionViewController_iPad(viewModel: SectionViewModel()) // Compact 下替换显示成 snackBarController let snackBarController: StateStorageTabBarController = { let tabBarController = StateStorageTabBarController() @@ -47,16 +35,10 @@ class BarkSplitViewController: UISplitViewController { }() func initViewControllers() { - self.viewControllers = [sectionViewController, homeViewController] - } -} - -extension BarkSplitViewController: UISplitViewControllerDelegate { - func primaryViewController(forExpanding splitViewController: UISplitViewController) -> UIViewController? { - sectionViewController - } - - func primaryViewController(forCollapsing splitViewController: UISplitViewController) -> UIViewController? { - snackBarController + self.setViewController(sectionViewController, for: .primary) + // 设置默认打开页面 + let index: Int = Settings[.selectedViewControllerIndex] ?? 0 + self.setViewController(sectionViewController.viewControllers[index], for: .secondary) + self.setViewController(snackBarController, for: .compact) } } diff --git a/Controller/SectionViewController-iPad.swift b/Controller/SectionViewController-iPad.swift index 3b4fff5..61fb2c2 100644 --- a/Controller/SectionViewController-iPad.swift +++ b/Controller/SectionViewController-iPad.swift @@ -24,7 +24,15 @@ class SectionViewController_iPad: BaseViewController, UITableV let homeController = BarkNavigationController(rootViewController: HomeViewController(viewModel: HomeViewModel())) let messageListController = BarkNavigationController(rootViewController: MessageListViewController(viewModel: MessageListViewModel())) let settingsController = BarkNavigationController(rootViewController: MessageSettingsViewController(viewModel: MessageSettingsViewModel())) - + + var viewControllers: [UIViewController] { + [ + homeController, + messageListController, + settingsController + ] + } + override func viewDidLoad() { super.viewDidLoad() self.title = "Bark" @@ -44,14 +52,11 @@ class SectionViewController_iPad: BaseViewController, UITableV return Observable.just(indexPath) } .subscribe { [weak self] indexPath in - guard let self, indexPath.row < 3 else { + guard let self, indexPath.row < self.viewControllers.count else { return } - self.splitViewController?.showDetailViewController([ - self.homeController, - self.messageListController, - self.settingsController - ][indexPath.row], sender: self) + self.splitViewController?.showDetailViewController(self.viewControllers[indexPath.row], sender: self) + Settings[.selectedViewControllerIndex] = indexPath.row }.disposed(by: rx.disposeBag) }