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'

21
demandé sur LorTush 2014-10-14 19:43:59

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:

  1. modifier une propriété pourwillSet/didSet appelle encore pour le super get/set. Vous pouvez le dire parce que l'état change de .normal.selected.
  2. 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 selectednewValuewillSet ou oldValuedidSet dé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.
51
répondu Brian Nickel 2016-12-09 17:06:25

vous ferais comme par exemple ceci:

class MyButton : UIButton {

    // ...

    override var isSelected: Bool {
        willSet(newValue) {
            super.isSelected = newValue;
            // do your own business here...
        }
    }

    // ...

}
6
répondu holex 2017-06-20 10:25:49

essayez ceci

override public var selected: Bool {
    willSet(selectedValue) {
        self.selected = selectedValue
        // Do whatever you want
    }
}
0
répondu diegomen 2014-10-14 16:04:35

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");
    }

}
0
répondu Anit Kumar 2016-02-24 11:21:55