UITableViewCell中的按钮订阅

  • 关键是要重写cell的prepareForReuse方法,并在该方法中重新创建disposeBag

注意 prepareForReuse() 方法里的 disposeBag = DisposeBag()
每次 prepareForReuse() 方法执行时都会初始化一个新的 disposeBag。这是因为 cell 是可以复用的,这样当 cell 每次重用的时候,便会自动释放之前的 disposeBag,从而保证 cell 被重用的时候不会被多次订阅,避免错误发生

import UIKit
import RxSwift
 
//单元格类
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.orange
        button.layer.cornerRadius = 5
        button.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")
    }
}

参考文章:Swift - RxSwift的使用详解62(订阅UITableViewCell里的按钮点击事件)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 人们传统的思考方式是逻辑性思考,有就是一个问题从上往下按照一定的逻辑推理进行思考和挖掘。但是,这种思考方式有很大的...
    老熊_71ae阅读 421评论 0 0
  • 十年之前,我们是朋友,还可以问候…… 现在问候也成了奢侈~ 我们的青春正如流水一般匆匆流去,再不是没心没肺的玩闹,...
    山里小妞爱扭扭阅读 234评论 0 3