我正在尝试为我在表格视图中创建的每个单元格创建两个不同的按钮。其中一个按钮是一个+按钮,可以增加标签。然而,在我的测试中,我无法使用该功能。我目前的错误说
Argument of #selector does not refer to an '@objc' method, property, or initializer
我觉得我完全错误地实现了.addTarget方法,但我是新手。这是我的代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item = items[indexPath.section]
let cell = tableView.dequeueReusableCell(withIdentifier: "itemCell") as! AddItemCell
cell.setCell(item: item)
let itemAmount = cell.itemAmount as UILabel?
cell.addButton.addTarget(self, action: #selector(addItem(sender:cell.addButton,forLabel:itemAmount!)), for: .touchUpInside)
}
@objc func addItem(sender: UIButton, forLabel label:UILabel) {
print("Add Button Clicked")
}
您正在使用选择器语法错误:
action: #selector(addItem(sender:cell.addButton,forLabel:itemAmount!))
说啊:
action: #selector(addItem)
然而,然而,您将面临一个新问题。你认为不知怎的,你可以让这个按钮调用一个叫做addItem(sender:forLabel:)
的东西。你不能。将addItem
的声明更改为addItem(_ sender:UIButton)
。这是按钮水龙头可以调用的唯一功能。
因此,您将拥有发件人(按钮),但您必须从那里找出标签是什么。 (这应该很容易,因为,知道按钮,你知道单元格,知道单元格,你知道标签。)你不能将标签作为参数传递以响应按钮点击 - 但你不需要至。
您需要在单元格中创建回调函数
class AddItemCell: UITableViewCell {
var buttonClickCallback:(() -> Void)?
@IBAction func onButtonClick(_ sender:Any) {
buttonClickCallback?()
}
}
并在buttonClickCallback
方法中指定tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item = items[indexPath.section]
let cell = tableView.dequeueReusableCell(withIdentifier: "itemCell") as! AddItemCell
cell.setCell(item: item)
let itemAmount = cell.itemAmount as UILabel?
cell.buttonClickCallback = {
self.addItem(sender:cell.addButton,forLabel:itemAmount!)
}
}