Swift - 使用.addTarget为UITableViewCell创建一个按钮

问题描述 投票:1回答:2

我正在尝试为我在表格视图中创建的每个单元格创建两个不同的按钮。其中一个按钮是一个+按钮,可以增加标签。然而,在我的测试中,我无法使用该功能。我目前的错误说

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")

}
swift uitableview selector
2个回答
1
投票

您正在使用选择器语法错误:

action: #selector(addItem(sender:cell.addButton,forLabel:itemAmount!))

说啊:

action: #selector(addItem)

然而,然而,您将面临一个新问题。你认为不知怎的,你可以让这个按钮调用一个叫做addItem(sender:forLabel:)的东西。你不能。将addItem的声明更改为addItem(_ sender:UIButton)。这是按钮水龙头可以调用的唯一功能。

因此,您将拥有发件人(按钮),但您必须从那里找出标签是什么。 (这应该很容易,因为,知道按钮,你知道单元格,知道单元格,你知道标签。)你不能将标签作为参数传递以响应按钮点击 - 但你不需要至。


0
投票

您需要在单元格中创建回调函数

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!)
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.