UIButton从错误的类调用函数

时间:2017-04-22 13:38:54

标签: ios swift uibutton

我有一个ButtonProvider类,用于创建我的按钮并添加目标操作。但是,当按下按钮时,它不会从创建它的ButtonProvider类调用该函数,而是调用另一个类中具有相同名称的函数。

class ButtonProvider {

    let view: UIView!
    let button: UIButton!

    init(view: UIView) {
        self.view = view
    }

    func showButton() {
        button = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
        button.backgroundColor = .white
        button.addTarget(self, action: #selector(ButtonProvider.close), for: .touchUpInside)

        view.addSubview(button)
    }

    @objc func close() {
        button.removeFromSuperview()
    }

}

在我的电话ViewController中:

override func viewDidLoad() {
    let buttonProvider = ButtonProvider(view: self.view)
    buttonProvider.showButton()
}

@objc func close() {
    //This is the function that is called
}

为什么ButtonProvider.close的选择器会调用我的ViewController.close函数?

1 个答案:

答案 0 :(得分:1)

buttonProvider不属于控制器,因此只要viewDidLoad结束,它就会被解除分配。当按下按钮时,实例不再存在于内存中,结果将是未定义的行为,通常是崩溃。

您必须将buttonProvider保存到控制器中的强属性。