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:
- La anulación de una propiedad para
willSet/didSet
aún se llama super paraget/set
. Se puede saber porque el estado cambia de.normal
a.selected
. - willSet y didSet se llaman incluso cuando el valor no está cambiando, por lo que es probable que desee comparar el valor de
selected
connewValue
enwillSet
ooldValue
endidSet
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
}
}