RxCocoa

作者: Code_人生 | 来源:发表于2019-08-13 17:11 被阅读0次
    • 普通tableView数据绑定
            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点击事件
            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复选点击事件
            tableView.rx.itemDeselected.subscribe(onNext: { (indexPath) in
                print("再次点击\(indexPath)行")
            }).disposed(by: self.disposeBag)
    
    • tableView移动事件
          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删除事件
            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新增事件
            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

    相关文章

      网友评论

          本文标题:RxCocoa

          本文链接:https://www.haomeiwen.com/subject/copbjctx.html