RxSwift(11)双向绑定

2019-08-13  本文已影响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)
上一篇下一篇

猜你喜欢

热点阅读