RxCocoa

2019-08-13  本文已影响0人  Code_人生
        let dataOB = BehaviorSubject.init(value: self.viewModel.dataArray)

        // 方法一
        dataOB.asObserver().bind(to: self.tableView.rx.items(cellIdentifier: resuseID, cellType: LGTableViewCell.self)) { (row, model, cell) in
            cell.setUIData(model as! LGModel)
        }.disposed(by: self.disposeBag)
        
        // 方法二
//        dataOB.asObserver().asDriver(onErrorJustReturn: []).drive(self.tableView.rx.items) {
//            (tb, indexPath, model) -> LGTableViewCell in
//            let cell = tb.dequeueReusableCell(withIdentifier: self.resuseID) as! LGTableViewCell
//            cell.setUIData(model as! LGModel)
//            return cell
//        }.disposed(by: self.disposeBag)
        tableView.rx.itemSelected.subscribe(onNext: { [weak self](indexPath) in
            print("点击\(indexPath)行")
            self?.navigationController?.pushViewController(LGSectionViewController(), animated: true)
            self?.tableView.deselectRow(at: indexPath, animated: true)
        }).disposed(by: self.disposeBag)

methodInvoked 响应之后
sentMessage 响应之前

        tableView.rx.itemDeselected.subscribe(onNext: { (indexPath) in
            print("再次点击\(indexPath)行")
        }).disposed(by: self.disposeBag)
      tableView.rx.itemMoved.subscribe(onNext: { [weak self] (sourceIndex,destinationIndex) in
            print("从\(sourceIndex)移动到\(destinationIndex)")
            self?.viewModel.dataArray.swapAt(sourceIndex.row, destinationIndex.row)
            self?.loadUI(obSubject: dataOB)
        }).disposed(by: self.disposeBag)
        tableView.rx.itemDeleted.subscribe(onNext: { [weak self](indexPath) in
            print("点击删除\(indexPath)行")
            self?.viewModel.dataArray.remove(at: indexPath.row)
            self?.loadUI(obSubject: dataOB)
        }).disposed(by: self.disposeBag)
        tableView.rx.itemInserted.subscribe(onNext: { [weak self](indexPath) in
            print("添加数据在\(indexPath)行")
            guard let model = self?.viewModel.dataArray.last else{
                print("数据有问题,无法新增")
                return
            }
            self?.viewModel.dataArray.insert(model, at: indexPath.row)
            self?.loadUI(obSubject: dataOB)
        }).disposed(by: self.disposeBag)
        let tableViewDataSource = RxTableViewSectionedReloadDataSource<SectionModel<String,LGSectionModel>>(configureCell: { [weak self](dataSource, tab, indexPath, model) -> LGTableViewCell in

            let cell = tab.dequeueReusableCell(withIdentifier: self?.resuseID ?? "resuseID_LGSectionViewController", for: indexPath) as! LGTableViewCell
            cell.setUISectionData(model)
            cell.selectionStyle = .none
            return cell
        },titleForHeaderInSection: { dataSource,index -> String in
            // print("数据:\(dataSource.sectionModels[index].identity)")
            return dataSource.sectionModels[index].model
        })
        self.data.githubData.asDriver(onErrorJustReturn: [])
            .drive(self.tableView.rx.items(dataSource: tableViewDataSource))
            .disposed(by: self.disposeBag)

1、RxTableViewSectionedReloadDataSource -> TableViewSectionedDataSource -> init
2、self.tableView.delegate = self: items -> self.delegate -> RxScrollViewDelegateProxy.proxy(for: base) -> self._setCurrentDelegate(proxy, to: object) -> setCurrentDelegate(castOptionalOrFatalError(delegate), to: object) -> object.delegate = delegate
3、self.tableView.dataSource = self: items -> ource.subscribeProxyDataSource(o... -> DelegateProxy.proxy(for: object) -> self._setCurrentDelegate(proxy, to: object) -> setCurrentDelegate(castOptionalOrFatalError(delegate), to: object) -> object.delegate = delegate
4、items -> 向上滑动 -> RxTableViewReactiveArrayDataSourceSequenceWrapper -> RxTableViewReactiveArrayDataSource -> _RxTableViewReactiveArrayDataSource

上一篇下一篇

猜你喜欢

热点阅读