SectionViewController-iPad.swift 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //
  2. // SectionTableViewController-iPad.swift
  3. // Bark
  4. //
  5. // Created by sidguan on 2024/6/23.
  6. // Copyright © 2024 Fin. All rights reserved.
  7. //
  8. import UIKit
  9. import NSObject_Rx
  10. import RxCocoa
  11. import RxDataSources
  12. import RxSwift
  13. class SectionViewController_iPad: BaseViewController<SectionViewModel>, UITableViewDelegate {
  14. let tableView: UITableView = {
  15. let tableView = UITableView(frame: .zero, style: .grouped)
  16. tableView.register(UITableViewCell.self, forCellReuseIdentifier: "\(UITableViewCell.self)")
  17. tableView.backgroundColor = BKColor.background.primary
  18. return tableView
  19. }()
  20. let homeController = BarkNavigationController(rootViewController: HomeViewController(viewModel: HomeViewModel()))
  21. let messageListController = BarkNavigationController(rootViewController: MessageListViewController(viewModel: MessageListViewModel()))
  22. let settingsController = BarkNavigationController(rootViewController: MessageSettingsViewController(viewModel: MessageSettingsViewModel()))
  23. var viewControllers: [UIViewController] {
  24. [
  25. homeController,
  26. messageListController,
  27. settingsController
  28. ]
  29. }
  30. override func viewDidLoad() {
  31. super.viewDidLoad()
  32. self.title = "Bark"
  33. navigationItem.largeTitleDisplayMode = .automatic
  34. }
  35. override func makeUI() {
  36. self.view.addSubview(tableView)
  37. tableView.delegate = self
  38. tableView.snp.makeConstraints { make in
  39. make.edges.equalToSuperview()
  40. }
  41. tableView.rx
  42. .itemSelected
  43. .flatMapLatest { indexPath -> Observable<IndexPath> in
  44. return Observable.just(indexPath)
  45. }
  46. .subscribe { [weak self] indexPath in
  47. guard let self, indexPath.row < self.viewControllers.count else {
  48. return
  49. }
  50. self.splitViewController?.showDetailViewController(self.viewControllers[indexPath.row], sender: self)
  51. Settings[.selectedViewControllerIndex] = indexPath.row
  52. }.disposed(by: rx.disposeBag)
  53. }
  54. override func bindViewModel() {
  55. let output = viewModel.transform(input: SectionViewModel.Input())
  56. let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, SectionItem>> {
  57. _, tableView, _, item -> UITableViewCell in
  58. guard let cell = tableView.dequeueReusableCell(withIdentifier: "\(UITableViewCell.self)") else {
  59. return UITableViewCell()
  60. }
  61. cell.selectionStyle = .gray
  62. cell.imageView?.image = item.image
  63. cell.imageView?.tintColor = BKColor.grey.darken4
  64. cell.textLabel?.text = item.title
  65. return cell
  66. }
  67. output.items
  68. .bind(to: tableView.rx.items(dataSource: dataSource))
  69. .disposed(by: rx.disposeBag)
  70. }
  71. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  72. return 55
  73. }
  74. func tableView(_ tableView: UITableView, canFocusRowAt indexPath: IndexPath) -> Bool {
  75. // 去掉额外的蓝色 selectionStyle
  76. return false
  77. }
  78. }