Geen omschrijving

MineOrderViewController.swift 3.4KB

    // // MineOrderViewController.swift // Paiai_iOS // // Created by FFIB on 16/4/7. // Copyright © 2016年 FFIB. All rights reserved. // import UIKit import RxSwift import RxCocoa import RxDataSources import PaiaiDataKit import PaiaiUIKit import PullToRefresh final class MineOrderViewController: UIViewController { @IBOutlet weak var tableView: UITableView! fileprivate let disposeBag = DisposeBag() var viewModel: MineOrderViewModel! override func viewDidLoad() { super.viewDidLoad() setup() binding() setNavigationBar() } private func setNavigationBar() { navigationItem.title = "订单记录" } private func setup() { setupReloadControl() setupLoadingControl() } private func setupReloadControl() { tableView.addPullToRefresh(PullToRefresh()) { [weak self] in guard let `self` = self else { return } self.viewModel.reload() } tableView.startRefreshing(at: .top) } private func setupLoadingControl() { tableView.addPullToRefresh(PullToRefresh(position: .bottom)) { [weak self] in guard let `self` = self else { return } self.viewModel.preload() } } deinit { tableView.removeAllPullToRefresh() } } /// binding UI fileprivate extension MineOrderViewController { var dataSource: RxTableViewSectionedReloadDataSource<AnimatableSectionModel<Int, OrderItem>> { return RxTableViewSectionedReloadDataSource<AnimatableSectionModel<Int, OrderItem>>( configureCell: { (_, tableView, indexPath, item) in let cell = tableView.dequeueReusableCell(withIdentifier: "orderCell", for: indexPath) as! OrderCell cell.setInfo(item) return cell }) } func binding() { bindViewModelToTableView() bindTableViewToViewModel() bindViewModelToRefreshing() } func bindViewModelToTableView() { viewModel.contents .bind(to: tableView.rx.items(dataSource: dataSource)) .disposed(by: disposeBag) } func bindTableViewToViewModel() { tableView.rx.modelSelected(OrderItem.self) .asDriver() .drive(onNext: { [unowned self] in self.viewModel.didSelect($0) }) .disposed(by: disposeBag) tableView.rx.willDisplayCell .asDriver() .drive(onNext: { [unowned self] in self.preload(indexPath: $0.indexPath) }) .disposed(by: disposeBag) } func preload(indexPath: IndexPath) { guard indexPath.row == tableView.numberOfRows(inSection: 0) - 5 else { return } tableView.startRefreshing(at: .bottom) } func bindViewModelToRefreshing() { viewModel.isLoading .asDriver(onErrorJustReturn: true) .drive(onNext: {[weak self] flag in guard let `self` = self else { return } if flag { self.tableView.endRefreshing(at: .top) } else { self.tableView.endRefreshing(at: .bottom) } }).disposed(by: disposeBag) } } extension MineOrderViewController: NavigationBackViewController {} extension MineOrderViewController: Storyboarded { static func instantiate() -> MineOrderViewController { return UIStoryboard.mine.instantiateViewController(type: MineOrderViewController.self) } }