color - menu ios
¿Es posible anular el método de acción para UIButton en Swift? (4)
A medida que agregaste el objetivo, puedes eliminarlo usando el método removeTarget en tu botón:
func removeTarget(_ target: AnyObject?,
action action: Selector,
forControlEvents controlEvents: UIControlEvents)
EDITAR : Ver la respuesta de @Rohit KP por ejemplo de uso. Sin embargo, es posible que desee considerar el uso de otra cosa que ''.AllEvents'', según lo que necesite.
Tengo un UIButton
. Quiero usar el mismo UIButton
para ejecutar múltiples acciones. Primero estoy configurando la acción a un botón programáticamente.
button1.addTarget(self, action: #selector(ViewController.function1), forControlEvents: .TouchUpInside)
A continuación, deseo descartar esa función y quiero agregar otra acción.
button1.addTarget(self, action: #selector(ViewController.function2), forControlEvents: .TouchUpInside)
¿Es posible anular el objetivo existente para el botón?
Debes eliminar la acción anterior del objetivo antes de agregar otra nueva, provocará que ambas acciones se desencadenen
button1.removeTarget(self, action: #selector(ViewController.function1), forControlEvents: .AllEvents)
El caso que sugirió no anulará la acción anterior, sino que agregará la segunda acción al botón, lo que ViewController.function1
como resultado que se llame a ViewController.function1
y ViewController.function2
.
Debe eliminar la acción anterior del objetivo antes de agregar una nueva mediante el uso de
button1.removeTarget(self, action: #selector(ViewController.function1), forControlEvents: .AllEvents)
O elimine todas las acciones anteriores antes de agregar la nueva
button1.removeTarget(nil, action: nil, forControlEvents: .AllEvents)
Te recomiendo que crees una función de envoltura. Debido a que agregar / eliminar el objetivo dinámicamente puede conducir a un bloqueo muerto.
Por lo tanto, probablemente deba crear una función que siempre será llamada y hacer sus cosas en:
@IBOutlet func myWrapper(sender : AnyObject?) {
if (conditionA) {
// do stuff A
} else {
// do stuff B
}
}