Swift4:UIButton 不起作用



在我的应用程序中,我正在尝试支持 UIButton,我只想让它打印"这是一个测试" 当我按下按钮时,它会执行经典的按钮动画,但是控制台中没有打印任何内容。

var tbutton: UIButton = {
let button = UIButton(type: .system)
button.frame = CGRect(x: 40.0, y:400.0, width: 300.0, height: 300.0)
let image = UIImage(named: "backb")
button.setBackgroundImage(image, for: .normal)
button.addTarget(self, action: #selector(dothings), for: .touchUpInside)
return button
}()
@objc func dothings(){
print("this is a test")
}

然后,我将按钮添加到视图中:

view.addSubview(tbutton)

我是否缺少一段代码,或者我编码错误?

您不应该以这种方式初始化按钮。

引用 Apple 文档 使用闭包或函数设置默认属性值:

如果使用闭包初始化

属性,请记住,在执行闭包时,实例的其余部分尚未初始化。这意味着您无法从闭包中访问任何其他属性值,即使这些属性具有默认值也是如此。此外:

您也不能使用隐式 self 属性,或调用实例的任何方法,因此问题就在这里:

button.addTarget(self, action: #selector(dothings), for: .touchUpInside)

因此,要解决此问题,您应该在视图控制器完全初始化后移动按钮初始化(或移动addTarget)(例如:viewDidLoad)。

解决此问题

的另一种方法,假设您仅在viewDidLoad之后使用此类按钮,是将其定义为lazy var

惰性存储属性是在第一次使用之前不计算其初始值的属性

最新更新