日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RxSwift之订阅UITableViewCell里的按钮点击事件

發布時間:2024/5/21 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RxSwift之订阅UITableViewCell里的按钮点击事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

  • 我們知道,通過訂閱 tableView 的 itemSelected 或 modelSelected 這兩個 Rx 擴展方法,可以對單元格的點擊事件進行響應,并執行相關的業務代碼。
  • 但有時候并不需要整個 cell 都能進行點擊響應,可能是點擊單元格內的按鈕時才觸發相關的操作。

二、效果展示

  • 點擊單元格右側的按鈕后,會彈出顯示該單元格的內容以及索引值;
  • 而點擊單元格其他位置,不觸發任何操作。

三、示例

  • MyTableCell.swift(自定義單元格類)
    • 注意 prepareForReuse() 方法里的 disposeBag = DisposeBag();
    • 每次 prepareForReuse() 方法執行時都會初始化一個新的 disposeBag,這是因為 cell 是可以復用的,這樣當 cell 每次重用的時候,便會自動釋放之前的 disposeBag,從而保證 cell 被重用的時候不會被多次訂閱,避免錯誤發生。
class MyTableCell: UITableViewCell {var button:UIButton!var disposeBag = DisposeBag()// 單元格重用時調用override func prepareForReuse() {super.prepareForReuse()disposeBag = DisposeBag()}// 初始化override init(style: UITableViewCellStyle, reuseIdentifier: String?) {super.init(style: style, reuseIdentifier: reuseIdentifier)// 添加按鈕button = UIButton(frame:CGRect(x:0, y:0, width:40, height:25))button.setTitle("點擊", for:.normal) button.backgroundColor = UIColor.orangebutton.layer.cornerRadius = 5button.titleLabel?.font = UIFont.systemFont(ofSize: 13)self.addSubview(button)}// 布局override func layoutSubviews() {super.layoutSubviews()button.center = CGPoint(x: bounds.size.width - 35, y: bounds.midY)}required init?(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")} }
  • ViewController.swift(主視圖控制器):
var tableView:UITableView! let disposeBag = DisposeBag()// 創建表格視圖 self.tableView = UITableView(frame: self.view.frame, style:.plain) //創建一個重用的單元格 self.tableView!.register(MyTableCell.self, forCellReuseIdentifier: "Cell") // 單元格無法選中 self.tableView.allowsSelection = false self.view.addSubview(self.tableView!)// 初始化數據 let items = Observable.just(["文本輸入框的用法","開關按鈕的用法","進度條的用法","文本標簽的用法",])// 設置單元格數據(其實就是對 cellForRowAt 的封裝) items.bind(to: tableView.rx.items) { (tableView, row, element) in// 初始化celllet cell = tableView.dequeueReusableCell(withIdentifier: "Cell")as! MyTableCellcell.textLabel?.text = "\(element)"// cell中按鈕點擊事件訂閱cell.button.rx.tap.asDriver().drive(onNext: { [weak self] inself?.showAlert(title: "\(row)", message: element)}).disposed(by: cell.disposeBag)return cell}.disposed(by: disposeBag)// 顯示彈出框信息 func showAlert(title: String, message: String) {let alert = UIAlertController(title: title, message: message,preferredStyle: .alert)alert.addAction(UIAlertAction(title: "確定", style: .cancel))self.present(alert, animated: true) }

總結

以上是生活随笔為你收集整理的RxSwift之订阅UITableViewCell里的按钮点击事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。