一、UITableView 的基本用法
1,單個分區(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)建一個重用的單元格
self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.view.addSubview(self.tableView!)
//初始化數(shù)據(jù)
let items = Observable.just([
"文本輸入框的用法",
"開關(guān)按鈕的用法",
"進度條的用法",
"文本標簽的用法",
])
//設(shè)置單元格數(shù)據(jù)(其實就是對 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)當我們點擊某個單元格時將其索引位置,以及對應(yīng)的標題打印出來。


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

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


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


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


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


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

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