BarkSplitViewController.swift 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //
  2. // BarkSplitViewController.swift
  3. // Bark
  4. //
  5. // Created by sidguan on 2024/6/30.
  6. // Copyright © 2024 Fin. All rights reserved.
  7. //
  8. import Material
  9. import UIKit
  10. @available(iOS 14, *)
  11. class BarkSplitViewController: UISplitViewController {
  12. let sectionViewController = SectionViewController_iPad(viewModel: SectionViewModel())
  13. // Compact 下替换显示成 BarkTabBarController
  14. let compactController = BarkTabBarController()
  15. override func viewDidLoad() {
  16. super.viewDidLoad()
  17. self.preferredDisplayMode = .oneBesideSecondary
  18. self.preferredSplitBehavior = .tile
  19. self.delegate = self
  20. initViewControllers()
  21. }
  22. func initViewControllers() {
  23. self.setViewController(sectionViewController, for: .primary)
  24. // 设置默认打开页面
  25. let index: Int = Settings[.selectedViewControllerIndex] ?? 0
  26. self.setViewController(sectionViewController.viewControllers[index], for: .secondary)
  27. DispatchQueue.main.async {
  28. self.sectionViewController.tableView.selectRow(at: IndexPath(row: index, section: 0), animated: false, scrollPosition: .none)
  29. }
  30. self.setViewController(compactController, for: .compact)
  31. }
  32. }
  33. @available(iOS 14, *)
  34. extension BarkSplitViewController: UISplitViewControllerDelegate {
  35. // 同步 sectionViewController 和 compactController 当前显示页面
  36. func splitViewControllerDidCollapse(_ svc: UISplitViewController) {
  37. guard let index: Int = Settings[.selectedViewControllerIndex] else {
  38. return
  39. }
  40. self.compactController.selectedIndex = index
  41. }
  42. func splitViewControllerDidExpand(_ svc: UISplitViewController) {
  43. guard let index: Int = Settings[.selectedViewControllerIndex] else {
  44. return
  45. }
  46. self.sectionViewController.tableView.selectRow(at: IndexPath(row: index, section: 0), animated: false, scrollPosition: .none)
  47. self.setViewController(self.sectionViewController.viewControllers[index], for: .secondary)
  48. }
  49. }