ios swift uibutton subclass

ios - Swift-UIButton overriding setSelected



subclass (4)

Como mencionaron otros, puedes usar willSet para detectar cambios. Sin embargo, en una anulación, no es necesario asignar el valor a super, solo está observando el cambio existente.

Un par de cosas que puedes observar desde el siguiente parque infantil:

  1. La anulación de una propiedad para willSet/didSet aún se llama super para get/set . Se puede saber porque el estado cambia de .normal a .selected .
  2. willSet y didSet se llaman incluso cuando el valor no está cambiando, por lo que es probable que desee comparar el valor de selected con newValue en willSet o oldValue en didSet para determinar si desea animar o no.

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.

Estoy creando una subclase UIButton en Swift para realizar dibujos personalizados y animaciones en la selección

¿Cuál sería el equivalente en Swift de anular - (void)setSelected:(BOOL)selected en ObjC?

Lo intenté

override var selected: Bool

por lo que pude implementar un observador pero me sale

Cannot override with a stored property ''selected''


Cree IBAction y marque el botón seleccionado o no en el lenguaje rápido.

@IBAction func favoriteButtonAction(sender: UIButton) { // Save Data sender.selected = !sender.selected; if (sender.selected) { NSLog(" Not Selected"); } else { NSLog(" Selected"); } }


Lo harías como por ejemplo esto:

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


prueba esto

override public var selected: Bool { willSet(selectedValue) { self.selected = selectedValue // Do whatever you want } }