Je crée une sous-classe UIButton dans Swift pour effectuer un dessin et une animation personnalisés sur la sélection
Quel serait l'équivalent dans Swift de surcharger - (void)setSelected:(BOOL)selected
dans ObjC?
J'ai essayé
override var selected: Bool
afin que je puisse mettre en œuvre un observateur mais je reçois
Cannot override with a stored property 'selected'
Comme d'autres l'ont mentionné, vous pouvez utiliser willSet
pour détecter les modifications. Dans un remplacement, cependant, vous n'avez pas besoin d'affecter la valeur à super, vous observez simplement le changement existant.
Quelques choses que vous pouvez observer sur le terrain de jeu suivant:
willSet/didSet
appelle toujours super pour get/set
. Vous pouvez le savoir car l'état change de .normal
à .selected
.selected
à newValue
dans willSet
ou oldValue
in didSet
pour déterminer s'il faut ou non animer.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.
vous le feriez comme par exemple cette:
class MyButton : UIButton {
// ...
override var isSelected: Bool {
willSet(newValue) {
super.isSelected = newValue;
// do your own business here...
}
}
// ...
}
essaye ça
override public var selected: Bool {
willSet(selectedValue) {
self.selected = selectedValue
// Do whatever you want
}
}