SwiftでUIButtonサブクラスを作成して、選択時にカスタム描画とアニメーションを実行します
ObjCで- (void)setSelected:(BOOL)selected
をオーバーライドするSwift)で同等のものは何でしょうか?
私は試した
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.
あなたは例えばこの:
class MyButton : UIButton {
// ...
override var isSelected: Bool {
willSet(newValue) {
super.isSelected = newValue;
// do your own business here...
}
}
// ...
}
これを試して
override public var selected: Bool {
willSet(selectedValue) {
self.selected = selectedValue
// Do whatever you want
}
}