Swift-覆盖setSelected的UIButton
我在Swift中制作了一个UIButton子类,以在选择时执行自定义绘图和动画
Swift - (void)setSelected:(BOOL)selected
中的ObjC中的覆盖相当于什么?
我试过了
override var selected: Bool
所以我可以实现一个观察者,但是我得到
Cannot override with a stored property 'selected'
回答:
像其他提到的一样,您可以使用它willSet
来检测更改。但是,在替代中,您不需要将值分配给super,而只是观察现有的更改。
您可以从以下游乐场观察到几件事:
- 覆盖的属性
willSet/didSet
仍会为调用superget/set
。您可以知道,因为状态从.normal
变为.selected
。 - willSet和didSet被称为甚至当值没有改变,所以你可能会想要做比较的价值
selected
无论是newValue
在willSet
或oldValue
在didSet
确定是否要动画。
import UIKit class MyButton : UIButton {
override var isSelected: Bool {
willSet {
print("changing from \(isSelected) to \(newValue)")
}
didSet {
print("changed from \(oldValue) to \(isSelected)")
}
}
}
let button = MyButton()
button.state == .normal
button.isSelected = true // Both events fire on change.
button.state == .selected
button.isSelected = true // Both events still fire.
以上是 Swift-覆盖setSelected的UIButton 的全部内容, 来源链接: utcz.com/qa/402284.html