首页 > 解决方案 > 如何使用选择器通过函数传递两个参数

问题描述

cellForRowAtIndexPath,我试图将开关选择和字符串传递给选择器函数,但我不能。请帮忙。

let pidName = "someString"
cell.switchSelection.tag = indexPath.row
    cell.switchSelection.addTarget(self, action: 
 #selector(self.switchOperation(_:pid:)), for: .valueChanged)

在这里我必须通过发件人pidName但失败了

@objc func switchOperation(_ sender: UISwitch, pid: Any){
     let store = (sender).isOn
     let settingTag = pid
}

标签: iosswiftselector

解决方案


正确的解决方案是将操作移动到您的单元格类中:

class MyCell: UITableViewCell {
    @IBOutlet weak var switchSelection: UISwitch!

    override func awakeFromNib() {
        super.awakeFromNib()
        switchSelection.addTarget(self, action: #selector(MyCell.action(_:)), for: .valueChanged)
    }

    func configure(switchAction: @escaping (Bool) -> Void) {
        self.switchAction = switchAction
    }

    @objc func action(_ sender: UISwitch) {
        switchAction(sender.isOn)
    }

    private var switchAction: (Bool) -> Void = { _ in }
}

现在在您的表视图委托中,您可以这样做:

let pidName = "someString"
cell.configure(switchAction: { [weak self] isOn in 
    let store = isOn 
    let settingTag = pid
}

或者你可以这样做:

let pidName = "someString"
cell.configure(switchAction: { [weak self] isOn in 
    self?.switchOperation(isOn: isOn, pid: pid)
}

@objc func switchOperation(isOn: Bool, pid: Any){
    let store = isOn
    let settingTag = pid
}

推荐阅读