BarkNavigationController.swift 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //
  2. // BarkNavigationController.swift
  3. // Bark
  4. //
  5. // Created by huangfeng on 2018/6/25.
  6. // Copyright © 2018 Fin. All rights reserved.
  7. //
  8. import Material
  9. import RxSwift
  10. import UIKit
  11. class BarkNavigationController: UINavigationController {
  12. override func viewDidLoad() {
  13. super.viewDidLoad()
  14. self.navigationBar.prefersLargeTitles = true
  15. }
  16. }
  17. class BarkSnackbarController: SnackbarController {
  18. override var childForStatusBarStyle: UIViewController? {
  19. return self.rootViewController
  20. }
  21. }
  22. enum TabPage: Int {
  23. case unknown = -1
  24. case service = 0
  25. case messageHistory = 1
  26. case settings = 2
  27. }
  28. class StateStorageTabBarController: UITabBarController, UITabBarControllerDelegate {
  29. // 标记当前显示的页面,再次点击相同的页面时当做页面点击事件。
  30. var currentSelectedIndex: Int = 0
  31. // 点击当前页面的 tabBarItem , 可以用以点击刷新当前页面等操作
  32. lazy var tabBarItemDidClick: Observable<TabPage> = {
  33. self.rx.didSelect
  34. .flatMapLatest { _ -> Single<TabPage> in
  35. let single = Single<TabPage>.create { single in
  36. if self.currentSelectedIndex == self.selectedIndex {
  37. single(.success(TabPage(rawValue: self.selectedIndex) ?? .unknown))
  38. }
  39. self.currentSelectedIndex = self.selectedIndex
  40. return Disposables.create()
  41. }
  42. return single
  43. }.share()
  44. }()
  45. var isFirstAppear = true
  46. override func viewWillAppear(_ animated: Bool) {
  47. super.viewWillAppear(animated)
  48. if isFirstAppear {
  49. isFirstAppear = false
  50. // 开启APP时,默认选择上次打开的页面
  51. if let index: Int = Settings[.selectedViewControllerIndex] {
  52. self.selectedIndex = index
  53. self.currentSelectedIndex = index
  54. }
  55. // 保存打开的页面Index
  56. self.rx.didSelect.subscribe(onNext: { _ in
  57. Settings[.selectedViewControllerIndex] = self.selectedIndex
  58. }).disposed(by: rx.disposeBag)
  59. }
  60. }
  61. }