美文网首页
RxSwift(11)双向绑定

RxSwift(11)双向绑定

作者: 忆痕无殇 | 来源:发表于2019-08-13 22:22 被阅读0次
    1:一组tableView的绑定
       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)
    
    

    点击事件

     // 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)
    

    去掉点击事件

     // 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)
    

    注意:一定要 [weak self]

    2:分组tableView的实现(中介者)
     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
            }
    

    SectionModel底层封装

    public struct SectionModel<Section, ItemType> {
        public var model: Section
        public var items: [Item]
    
        public init(model: Section, items: [Item]) {
            self.model = model
            self.items = items
        }
    }
    

    返回的就是model,所以在外面的数据加载的时候可以取到model。可以自定义类型。

     public var identity: Section {
            return model
        }
    

    header闭包

    ,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)
    

    相关文章

      网友评论

          本文标题:RxSwift(11)双向绑定

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