Няма описание

MineOrderViewController.swift 3.7KB

    // // MineOrderViewController.swift // PaiAi // // Created by zhengjianfei 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 { // MARK: Storyboard property @IBOutlet weak var tableView: UITableView! // MARK: data property fileprivate let disposeBag = DisposeBag() var viewModel: MineOrderViewModel! // MARK: view function override func viewDidLoad() { super.viewDidLoad() setup() binding() setNavigationBar() } private func setNavigationBar() { title = "我的照片群" } private func setup() { setupReloadControl() setupLoadingControl() } private func setupReloadControl() { tableView.addPullToRefresh(PullToRefresh()) { [unowned self] in self.viewModel.reload() } tableView.startRefreshing(at: .top) } private func setupLoadingControl() { tableView.addPullToRefresh(PullToRefresh(position: .bottom)) { [unowned self] in self.viewModel.preload() } } } /// fileprivate extension MineOrderViewController { var dataSource: RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, OrderItem>> { return RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, OrderItem>>( configureCell: { (dataSource, 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) viewModel.hasMoreData .asDriver(onErrorJustReturn: true) .drive(onNext: {[weak self] flag in guard let `self` = self else { return } if flag { if self.tableView.bottomPullToRefresh == nil { self.setupLoadingControl() } } else { // self.tableViewt } }).disposed(by: disposeBag) } } extension MineOrderViewController: NavigationBackViewController {}