LNNavigationController.swift 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //
  2. // LNNavigationController.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/11/6.
  6. //
  7. import Foundation
  8. import UIKit
  9. class LNNavigationController: UINavigationController {
  10. private let whileListVC: [UIViewController.Type] = [
  11. LNMainViewController.self,
  12. LNWebViewController.self,
  13. LNLoginPhoneInputViewController.self,
  14. LNLoginCaptchaInputViewController.self
  15. ]
  16. override func viewDidLoad() {
  17. super.viewDidLoad()
  18. interactivePopGestureRecognizer?.delegate = self
  19. navigationBar.backgroundColor = .white
  20. configureNavigationBarAppearance()
  21. LNEventDeliver.addObserver(self)
  22. }
  23. override func viewDidAppear(_ animated: Bool) {
  24. super.viewDidAppear(animated)
  25. if !hasLogin {
  26. self.showLoginPanel()
  27. }
  28. }
  29. override func pushViewController(_ viewController: UIViewController, animated: Bool) {
  30. if hasLogin || whileListVC.contains(where: { $0 == type(of: viewController) }) {
  31. super.pushViewController(viewController, animated: animated)
  32. LNVoicePlayer.shared.stop()
  33. return
  34. }
  35. showLoginPanel()
  36. }
  37. override func popViewController(animated: Bool) -> UIViewController? {
  38. LNVoicePlayer.shared.stop()
  39. return super.popViewController(animated: animated)
  40. }
  41. }
  42. extension LNNavigationController: LNAccountManagerNotify {
  43. func onUserLogout() {
  44. DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
  45. guard let self else { return }
  46. showLoginPanel()
  47. }
  48. }
  49. }
  50. extension LNNavigationController {
  51. // 配置导航栏及返回按钮的全局样式
  52. private func configureNavigationBarAppearance() {
  53. let navBarAppearance = UINavigationBarAppearance()
  54. // navBarAppearance.backgroundColor = .backgroundSecondary // 导航栏背景色
  55. navBarAppearance.shadowColor = .clear // 去除底部阴影线
  56. UINavigationBar.appearance().standardAppearance = navBarAppearance
  57. UINavigationBar.appearance().scrollEdgeAppearance = navBarAppearance
  58. }
  59. private func showLoginPanel() {
  60. LNLoginPanel.show(container: viewControllers.first?.view)
  61. }
  62. }
  63. extension LNNavigationController: UIGestureRecognizerDelegate {
  64. func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
  65. guard viewControllers.count > 1 else { return false }
  66. guard let viewController = viewControllers.last as? LNViewController else { return true }
  67. return viewController.enableDragBack
  68. }
  69. func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
  70. shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
  71. true
  72. }
  73. }