gpt4 book ai didi

ios - 带有协议(protocol)的自定义 Cell,用于检查 UISwitch 中的更改

转载 作者:搜寻专家 更新时间:2023-11-01 07:13:43 25 4
gpt4 key购买 nike

我创建了一个自定义单元格 和一个协议(protocol) 以了解UISwitch 上的更改。我想我拥有我需要的一切,但我无法触发 func didChangeSwitchState

VouchersViewController.swift

// MARK: - UITableViewDelegate

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:VouchersFilterCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! VouchersFilterCell
cell.delegate = self
cell.textLabel?.text = self.vouchersFilters[indexPath.row]

return cell
}

// MARK: - VouchersFilterCellDelegate

func didChangeSwitchState(sender: VouchersFilterCell, isOn: Bool) {
let indexPath = self.tableView.indexPath(for: sender)
debugPrint(indexPath?.row)
}

BaseCell.swift

class BaseCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
// code common to all your cells goes here
setupViews()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

}

func setupViews(){
}
}

VouchersFilterCell.swift

protocol VouchersFilterCellDelegate: class {
func didChangeSwitchState(sender: VouchersFilterCell, isOn: Bool)
}

class VouchersFilterCell: BaseCell {

// MARK: - UIComponent

let titleLabel = UILabel()
let filterSwitch: UISwitch = {
let fSwitch = UISwitch()
fSwitch.addTarget(self, action: #selector(handledSwitchChange(sender:)), for: .valueChanged)
return fSwitch
}()

weak var delegate: VouchersFilterCellDelegate?

// MARK: - Life Cycle

override func awakeFromNib() {
super.awakeFromNib()
}

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}

// MARK: - Setup

override func setupViews() {
addSubview(titleLabel)
addSubview(filterSwitch)

addConstraintsWithFormat(format: "V:|-13-[v0]-13-|", views: titleLabel)
addConstraintsWithFormat(format: "H:|-16-[v0]-16-[v1]-16-|", views: titleLabel, filterSwitch)
addConstraintsWithFormat(format: "V:|-7-[v0]", views: filterSwitch)
}

// MARK: - IBAction

@IBAction func handledSwitchChange(sender: UISwitch) {
self.delegate?.didChangeSwitchState(sender: self, isOn:filterSwitch.isOn)
}
}

最佳答案

正如我们在评论中一起发现的那样,似乎在 self 准备好之前创建了一个 let 属性,因此 Switch 目标为 nil。更改为惰性 var 可确保首先创建 self。

lazy var filterSwitch: UISwitch = {
let fSwitch = UISwitch()
fSwitch.addTarget(self, action: #selector(handledSwitchChange(sender:)), for: .valueChanged)
return fSwitch
}()

关于ios - 带有协议(protocol)的自定义 Cell,用于检查 UISwitch 中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com