-1

我有一个UIButton内一个UITableViewCell。当我调用addTarget按钮并尝试放入函数时,自动完成功能会用白线划掉函数(见第一张图片)。Xcode 仍然允许我将函数放入并运行应用程序;但是,当点击按钮时,不会调用该函数。

在此处输入图像描述

按钮初始化:

private let infoButton: UIButton = {
        let button = UIButton()
        button.backgroundColor = .clear
        button.adjustsImageWhenHighlighted = false
        button.setImage(Images.sizeGuide, for: .normal)
        button.addTarget(self, action: #selector(infoButtonPressed(_:)), for: .touchUpInside)
        return button
    }()

功能(信息按钮按下):

@objc private func infoButtonPressed(_ sender: UIButton) {
        print("Button Pressed")
    }

因为我多次重复使用这个单元格并且只有一个单元格需要这个按钮,所以我有一个变量来指示是否显示按钮:

var hasInfoButton: Bool = false {
        didSet {
            if hasInfoButton {
                setupInfoButton()
            }
        }
    }

上面调用的函数只是使用 设置按钮autoLayout。需要提一下:当我尝试调用addTarget这个函数时,应用程序崩溃了Unrecognized selector sent to instance...

嵌入的tableView只是静态的并显示数据。因此,allowSelectionallowsMultipleSelection都设置为false

有人对此有解决方案吗?

4

1 回答 1

0

你不应该需要(_ sender: UIButton)的方法应该只是:

@objc func infoButtonPressed() {
    print("button pressed")
}

编辑:按钮初始化程序也有点奇怪。我一般做这种事情的方式是这样的:

let button = UIButton()

private func configureButton() {
        button.backgroundColor = .clear
        button.adjustsImageWhenHighlighted = false
        button.setImage(Images.sizeGuide, for: .normal)
        button.addTarget(self, action: #selector(infoButtonPressed(_:)), for: .touchUpInside)
}

然后打configureButton()进来viewDidLoad()

于 2020-07-13T03:08:05.090 回答