我在Swift中制作了一个UIButton子类,以在选择时执行自定义绘图和动画
在Swift中覆盖ObjC中的- (void)setSelected:(BOOL)selected
相当于什么?
我试过了override var selected: Bool
所以我可以实现一个观察者,但是我得到了Cannot override with a stored property 'selected'
最佳答案
像其他提到的一样,您可以使用willSet
来检测更改。但是,在替代中,您不需要将值分配给super,而只是观察现有的更改。
您可以从以下游乐场观察到几件事:
willSet/didSet
的属性仍会为get/set
调用super。您可以知道,因为状态从.normal
变为.selected
。 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.
关于ios - Swift-覆盖setSelected的UIButton,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26364869/