Swift-覆盖setSelected的UIButton

我在Swift中制作了一个UIButton子类,以在选择时执行自定义绘图和动画

Swift - (void)setSelected:(BOOL)selected中的ObjC中的覆盖相当于什么?

我试过了

override var selected: Bool

所以我可以实现一个观察者,但是我得到

Cannot override with a stored property 'selected'

回答:

像其他提到的一样,您可以使用它willSet来检测更改。但是,在替代中,您不需要将值分配给super,而只是观察现有的更改。

您可以从以下游乐场观察到几件事:

  1. 覆盖的属性willSet/didSet仍会为调用super get/set。您可以知道,因为状态从.normal变为.selected
  2. willSet和didSet被称为甚至当值没有改变,所以你可能会想要做比较的价值selected无论是newValuewillSetoldValuedidSet确定是否要动画。

    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

回到顶部