Swift-UIButton setsélectionnés
je crée une sous-classe UIButton dans Swift pour effectuer le dessin personnalisé et l'animation sur la sélection
quel serait L'équivalent dans Swift de l'annulation - (void)setSelected:(BOOL)selected en ObjC?
j'ai essayé
override var selected: Bool
donc je pourrais implémenter un observateur mais j'obtiens
Cannot override with a stored property 'selected'
4 réponses
comme d'autres mentionnés, vous pouvez utiliser willSet pour détecter les changements. Dans un override, cependant, vous n'avez pas besoin d'attribuer la valeur à super, vous observez simplement le changement existant.
deux choses que vous pouvez observer depuis le terrain de jeu suivant:
- modifier une propriété pour
willSet/didSetappelle encore pour le superget/set. Vous pouvez le dire parce que l'état change de.normal.selected. - willSet et didSet sont appelés même lorsque la valeur ne change pas, donc vous voudrez probablement faire la comparaison de la valeur de
selectednewValuewillSetouoldValuedidSetdéterminer s'il faut animer ou non.
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 ferais comme par exemple ceci:
class MyButton : UIButton {
// ...
override var isSelected: Bool {
willSet(newValue) {
super.isSelected = newValue;
// do your own business here...
}
}
// ...
}
essayez ceci
override public var selected: Bool {
willSet(selectedValue) {
self.selected = selectedValue
// Do whatever you want
}
}
bouton Créer IBAction et cocher sélectionné ou non en langage swift.
@IBAction func favoriteButtonAction(sender: UIButton) {
// Save Data
sender.selected = !sender.selected;
if (sender.selected)
{
NSLog(" Not Selected");
}
else
{
NSLog(" Selected");
}
}