一、UITableView 的基本用法
1,單個(gè)分區(qū)的表格

import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
var tableView:UITableView!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
//創(chuàng)建表格視圖
self.tableView = UITableView(frame: self.view.frame, style:.plain)
//創(chuàng)建一個(gè)重用的單元格
self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.view.addSubview(self.tableView!)
//初始化數(shù)據(jù)
let items = Observable.just([
"文本輸入框的用法",
"開關(guān)按鈕的用法",
"進(jìn)度條的用法",
"文本標(biāo)簽的用法",
])
//設(shè)置單元格數(shù)據(jù)(其實(shí)就是對(duì) 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)
}
}
2,單元格選中事件響應(yīng)
(1)當(dāng)我們點(diǎn)擊某個(gè)單元格時(shí)將其索引位置,以及對(duì)應(yīng)的標(biāo)題打印出來。


(2)如果業(yè)務(wù)代碼直接放在響應(yīng)方法內(nèi)部,可以這么寫:
//獲取選中項(xiàng)的索引
tableView.rx.itemSelected.subscribe(onNext: { indexPath in
print("選中項(xiàng)的indexPath為:\(indexPath)")
}).disposed(by: disposeBag)
//獲取選中項(xiàng)的內(nèi)容
tableView.rx.modelSelected(String.self).subscribe(onNext: { item in
print("選中項(xiàng)的標(biāo)題為:\(item)")
}).disposed(by: disposeBag)
(3)或者也可以在響應(yīng)中調(diào)用外部的方法:
//獲取選中項(xiàng)的索引
tableView.rx.itemSelected.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("選中項(xiàng)的indexPath為:\(indexPath)")
}).disposed(by: disposeBag)
//獲取選中項(xiàng)的內(nèi)容
tableView.rx.modelSelected(String.self).subscribe(onNext: {[weak self] item in
self?.showMessage("選中項(xiàng)的標(biāo)題為:\(item)")
}).disposed(by: disposeBag)
3,單元格取消選中事件響應(yīng)

//獲取被取消選中項(xiàng)的索引
tableView.rx.itemDeselected.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("被取消選中項(xiàng)的indexPath為:\(indexPath)")
}).disposed(by: disposeBag)
//獲取被取消選中項(xiàng)的內(nèi)容
tableView.rx.modelDeselected(String.self).subscribe(onNext: {[weak self] item in
self?.showMessage("被取消選中項(xiàng)的的標(biāo)題為:\(item)")
}).disposed(by: disposeBag)
4,單元格刪除事件響應(yīng)


//獲取刪除項(xiàng)的索引
tableView.rx.itemDeleted.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("刪除項(xiàng)的indexPath為:\(indexPath)")
}).disposed(by: disposeBag)
//獲取刪除項(xiàng)的內(nèi)容
tableView.rx.modelDeleted(String.self).subscribe(onNext: {[weak self] item in
self?.showMessage("刪除項(xiàng)的的標(biāo)題為:\(item)")
}).disposed(by: disposeBag)
5,單元格移動(dòng)事件響應(yīng)


//獲取移動(dòng)項(xiàng)的索引
tableView.rx.itemMoved.subscribe(onNext: { [weak self]
sourceIndexPath, destinationIndexPath in
self?.showMessage("移動(dòng)項(xiàng)原來的indexPath為:\(sourceIndexPath)")
self?.showMessage("移動(dòng)項(xiàng)現(xiàn)在的indexPath為:\(destinationIndexPath)")
}).disposed(by: disposeBag)
6,單元格插入事件響應(yīng)


//獲取插入項(xiàng)的索引
tableView.rx.itemInserted.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("插入項(xiàng)的indexPath為:\(indexPath)")
}).disposed(by: disposeBag)
7,單元格尾部附件(圖標(biāo))點(diǎn)擊事件響應(yīng)


//獲取點(diǎn)擊的尾部圖標(biāo)的索引
tableView.rx.itemAccessoryButtonTapped.subscribe(onNext: { [weak self] indexPath in
self?.showMessage("尾部項(xiàng)的indexPath為:\(indexPath)")
}).disposed(by: disposeBag)
8,單元格將要顯示出來的事件響應(yīng)

//獲取選中項(xiàng)的索引
tableView.rx.willDisplayCell.subscribe(onNext: { cell, indexPath in
print("將要顯示單元格indexPath為:\(indexPath)")
print("將要顯示單元格cell為:\(cell)\n")
}).disposed(by: disposeBag)