RxSwift之UI控件UITableView扩展的基本使用
Posted Forever_wj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxSwift之UI控件UITableView扩展的基本使用相关的知识,希望对你有一定的参考价值。
一、单分区的表格
- 如下所示,单个分区的表格展示:
- 示例代码:
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
var tableView:UITableView!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
// 创建表格视图
self.tableView = UITableView(frame: self.view.frame, style:.plain)
// 创建一个重用的单元格
self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.view.addSubview(self.tableView!)
// 初始化数据
let items = Observable.just([
"文本输入框的用法",
"开关按钮的用法",
"进度条的用法",
"文本标签的用法",
])
// 设置单元格数据(其实就是对 cellForRowAt 的封装)
items
.bind(to: tableView.rx.items) { (tableView, row, element) in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
cell.textLabel?.text = "\\(row):\\(element)"
return cell
}
.disposed(by: disposeBag)
}
}
二、单元格选中事件响应
- 当点击某个单元格时将其索引位置,以及对应的标题打印出来:
选中项的indexPath为:[0,1]
选中项的标题为:开关按钮的用法
- 业务代码直接放在响应方法内部,示例代码:
// 获取选中项的索引
tableView.rx.itemSelected.subscribe(onNext: { indexPath in
print("选中项的indexPath为:\\(indexPath)")
}).disposed(by: disposeBag)
// 获取选中项的内容
tableView.rx.modelSelected(String.self).subscribe(onNext: { item in
print("选中项的标题为:\\(item)")
}).disposed(by: disposeBag)
- 也可以在响应中调用外部的方法:
// 获取选中项的索引
tableView.rx.itemSelected.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("选中项的indexPath为:\\(indexPath)")
}).disposed(by: disposeBag)
// 获取选中项的内容
tableView.rx.modelSelected(String.self).subscribe(onNext: {[weak self] item in
self?.showMessage("选中项的标题为:\\(item)")
}).disposed(by: disposeBag)
三、单元格取消选中事件响应
被取消选中项的indexPath为:[0,2]
被取消选中项的标题为:进度条的用法
- 示例代码:
// 获取被取消选中项的索引
tableView.rx.itemDeselected.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("被取消选中项的indexPath为:\\(indexPath)")
}).disposed(by: disposeBag)
// 获取被取消选中项的内容
tableView.rx.modelDeselected(String.self).subscribe(onNext: {[weak self] item in
self?.showMessage("被取消选中项的的标题为:\\(item)")
}).disposed(by: disposeBag)
四、单元格删除事件响应
- 示例代码:
// 获取删除项的索引
tableView.rx.itemDeleted.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("删除项的indexPath为:\\(indexPath)")
}).disposed(by: disposeBag)
// 获取删除项的内容
tableView.rx.modelDeleted(String.self).subscribe(onNext: {[weak self] item in
self?.showMessage("删除项的的标题为:\\(item)")
}).disposed(by: disposeBag)
五、单元格移动事件响应
移动项原来的indexPath为:[0, 0]
移动项现在的indexPath为:[0, 1]
- 示例代码:
// 获取移动项的索引
tableView.rx.itemMoved.subscribe(onNext: { [weak self]
sourceIndexPath, destinationIndexPath in
self?.showMessage("移动项原来的indexPath为:\\(sourceIndexPath)")
self?.showMessage("移动项现在的indexPath为:\\(destinationIndexPath)")
}).disposed(by: disposeBag)
六、单元格插入事件响应
插入项的indexPath为:[0, 1]
- 示例代码:
// 获取插入项的索引
tableView.rx.itemInserted.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("插入项的indexPath为:\\(indexPath)")
}).disposed(by: disposeBag)
七、单元格尾部附件(图标)点击事件响应
尾部项的indexPath为:[0, 1]
- 示例代码:
// 获取点击的尾部图标的索引
tableView.rx.itemAccessoryButtonTapped.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("尾部项的indexPath为:\\(indexPath)")
}).disposed(by: disposeBag)
八、单元格将要显示出来的事件响应
- 示例代码:
// 获取选中项的索引
tableView.rx.willDisplayCell.subscribe(onNext: { cell, indexPath in
print("将要显示单元格indexPath为:\\(indexPath)")
print("将要显示单元格cell为:\\(cell)\\n")
}).disposed(by: disposeBag)
以上是关于RxSwift之UI控件UITableView扩展的基本使用的主要内容,如果未能解决你的问题,请参考以下文章
RxSwift之UI控件UICollectionView扩展的使用
RxSwift之UI控件UIButton与UIBarButtonItem扩展的使用
RxSwift之UI控件UIGestureRecognizer扩展的使用