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/didSetaún se llama super paraget/set. Se puede saber porque el estado cambia de.normala.selected. - willSet y didSet se llaman incluso cuando el valor no está cambiando, por lo que es probable que desee comparar el valor de
selectedconnewValueenwillSetooldValueendidSetpara 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
}
}