Swift - RxSwift的使用詳解30(UITableView的使用1:基本用法)

一、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)

RxSwift使用詳解系列
原文出自:www.hangge.com轉(zhuǎn)載請(qǐng)保留原文鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容