gpt4 book ai didi

ios - 为什么在 Collection View 单元格中以编程方式创建的按钮需要是惰性变量?

转载 作者:行者123 更新时间:2023-11-28 06:01:20 24 4
gpt4 key购买 nike

如果我在 collectionView 单元格中以编程方式创建按钮,如果我想触发添加的目标,为什么我需要将按钮设置为惰性变量而不是常量?

例如,

class Cell: UICollectionViewCell {

let xButton: UIButton = {
let button = UIButton(type: .system)
button.addTarget(self, action: #selector(handleX), for: .touchUpInside)
return button
}()

@objc func handleX() {
print("123")
}

...other boiler plate code
}

如果按钮被选中,123 永远不会被打印出来,但是如果我将我的按钮设置为惰性变量:

class Cell: UICollectionViewCell {

lazy var xButton: UIButton = {
let button = UIButton(type: .system)
button.addTarget(self, action: #selector(handleX), for: .touchUpInside)
return button
}()

@objc func handleX() {
print("123")
}

...other boiler plate code
}

123 被打印出来。

据我所知,惰性存储属性是一种直到第一次使用才计算初始值的属性。我不明白为什么它对 UIButton 很重要。

最佳答案

您需要按钮的创建是 lazy 以便您可以访问 self,它在创建单元格之后才可用。因此,问题不在于按钮本身的创建,而在于需要访问 self 的目标/操作的设置。

或者,您可以稍后在将按钮添加到单元格的 View 层次结构时分配目标/操作。

关于ios - 为什么在 Collection View 单元格中以编程方式创建的按钮需要是惰性变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49601513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com