美文网首页
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)双向绑定

    1:一组tableView的绑定 点击事件 去掉点击事件 移动事件 删除事件 新增事件 注意:一定要 [weak ...

  • RxSwift(九)-- 双向绑定

    在之前我们的举例、使用的时候,我们所有的绑定都是单向的,但是,有时候我们还是需要双向绑定的。就比如说,把某个控件的...

  • RxSwift-双向绑定

    UI响应model model绑定到UI 待完善

  • 双向绑定

    直接使用RxSwift Demo中定义好的双向绑定运算符(<->),在Operators.swift文件中,直接把...

  • 音乐播放

    rxswiftPlayer 这是一个音乐播放器,基于swift与rxswift双向绑定架构编写,git地址 简易播...

  • RxSwift之双向绑定实战

    什么是双向绑定?双向绑定是View与Model之间的一种相互响应的关系。 下面?以一个Demo实战来体验一下双向绑...

  • RxSwift-MVVM双向绑定

    RxSwift 篇章已经接近尾声,回首这个历程很累但很充实:白天备课,晚上VIP上课!忙里偷闲写下了这个篇章。可以...

  • RxSwift<9> —— MVVM双向绑定

    RxSwift 遇到tableView TableView的点击、复选、新增、删除、移动全部简洁实现 RxSwif...

  • RxSwift(24)——MVVM双向绑定

    在项目开发中,除了常用的MVC开发模式,还有一种常用的开发模式就是MVVM。 1.什么是MVVM?MVVM是Mod...

  • Vue 中的双向数据绑定

    双向绑定 单向数据流 双向绑定 or 单向数据流 Vue 是单向数据流,不是双向绑定 Vue 的双向绑定是语法糖 ...

网友评论

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

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