如何使用 Selector 将两个参数传递给函数
How to use Selector to pass two arguments with function
在 cellForRowAtIndexPath
中,我试图将开关选择和字符串传递给选择器函数,但我做不到。请帮忙。
let pidName = "someString"
cell.switchSelection.tag = indexPath.row
cell.switchSelection.addTarget(self, action:
#selector(self.switchOperation(_:pid:)), for: .valueChanged)
这里我必须传递 sender 和 pidName
但失败了
@objc func switchOperation(_ sender: UISwitch, pid: Any){
let store = (sender).isOn
let settingTag = pid
}
你不能有另一个参数作为
cell.switchSelection.addTarget(self, action:
#selector(self.switchOperation(_:)), for: .valueChanged)
只发送一个与目标添加到的对象相同类型的参数
你需要将 switch someWhere 的标签设置为 pid
并像这样使用它
@objc func switchOperation(_ sender: UISwitch) {
print(sender.tag)
}
正确的解决方案是将操作移动到您的单元格中 class:
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 }
}
现在在您的 table 视图委托中,您可以这样做:
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
}
在 cellForRowAtIndexPath
中,我试图将开关选择和字符串传递给选择器函数,但我做不到。请帮忙。
let pidName = "someString"
cell.switchSelection.tag = indexPath.row
cell.switchSelection.addTarget(self, action:
#selector(self.switchOperation(_:pid:)), for: .valueChanged)
这里我必须传递 sender 和 pidName
但失败了
@objc func switchOperation(_ sender: UISwitch, pid: Any){
let store = (sender).isOn
let settingTag = pid
}
你不能有另一个参数作为
cell.switchSelection.addTarget(self, action:
#selector(self.switchOperation(_:)), for: .valueChanged)
只发送一个与目标添加到的对象相同类型的参数
你需要将 switch someWhere 的标签设置为 pid
并像这样使用它
@objc func switchOperation(_ sender: UISwitch) {
print(sender.tag)
}
正确的解决方案是将操作移动到您的单元格中 class:
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 }
}
现在在您的 table 视图委托中,您可以这样做:
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
}