我有一个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函数?
答案 0 :(得分:1)
您buttonProvider
不属于控制器,因此只要viewDidLoad
结束,它就会被解除分配。当按下按钮时,实例不再存在于内存中,结果将是未定义的行为,通常是崩溃。
您必须将buttonProvider
保存到控制器中的强属性。