UIButton elimina todas las acciones objetivo


341

He agregado múltiples target-action-forControlEvents: a un UIButton. Me gustaría eliminar todo esto de una vez sin desasignar nada. Luego estableceré nuevos objetivos.

¿Es esto posible y cómo lo hago?

Respuestas:


824

Llame a removeTarget: action: forControlEvents:, pase nil para el destino, NULL para la acción y use una máscara de control que establezca todos los bits (UIControlEventAllEvents).

C objetivo

[someControl removeTarget:nil 
                   action:NULL 
         forControlEvents:UIControlEventAllEvents];

Swift 2

button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

Swift 3

button.removeTarget(nil, action: nil, for: .allEvents)

44
¡Gracias por el consejo! Aquí está el enlace completo, creo (es decir, a la sección): " developer.apple.com/iphone/library/documentation/uikit/… :"
SK9

1
La sugerencia del programa funciona, por supuesto. Para agregar a la respuesta aquí hay un fragmento de código como el que necesitaba: [button removeTarget: nil action: NULL forControlEvents: UIControlEventTouchUpInside];
SK9

66
Aparte: el método de instancia -allTargets devuelve un NSSet de todos los objetivos de la instancia (nulo si no hay ninguno).
SK9

3
¡Perfecto! exactamente lo que estaba buscando: D
Totumus Maximus

1
Actualizado con Swift 2 y 3, ya que hay respuestas competitivas con exactamente la misma respuesta, que difieren solo en el idioma.
Peter DeWeese

92

La respuesta de @progrmr en Swift 2:

button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

y Swift 3:

button.removeTarget(nil, action: nil, for: .allEvents)

Nota: Swift no tiene NULL, así que probé reemplazarlo nily parece funcionar bien.


55
Para Swift 3: ".AllEvents" es ahora ".allEvents" (con una 'a' minúscula):removeTarget(nil, action: nil, for: .allEvents)
Sasho

En cuanto a su NOTA: En realidad, creo que podría pasar a cualquiera nilo NULLde ambas la primera y segunda argumentos en Objective-C también, y va a trabajar. Creo que ambos se definen como (void*) 0(o al menos, evaluar como iguales).
Nicolas Miari

@Sasho Me encantaría ver algunas estadísticas sobre cuánto bajan los tamaños de los archivos de origen (en promedio) al actualizar a Swift 3 :-) (debido a las nuevas reglas de nomenclatura de métodos / argumentos).
Nicolas Miari

Dado que esta es la misma respuesta en un idioma diferente, y el idioma no está etiquetado en esta pregunta, debería ser una edición de la respuesta de @progrmr.
Peter DeWeese

6

Rápido:

btnCancel.removeTarget(self, action: Selector(), forControlEvents: UIControlEvents.AllEvents)

indique qué idioma está cubriendo
Juan Boero

@ JuanPabloBoero, es rápido
Iya

3

Swift 2:

actionButton.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

Swift 3 y 4:

actionButton.removeTarget(nil, action: nil, for: .allEvents)

C objetivo:

[actionButton removeTarget: nil action: NULL forControlEvents: UIControlEventAllEvents];

Espero eso ayude.


2
- removeTarget:action:forControlEvents:

Este método detiene la entrega de eventos al objeto de destino especificado.

  1. Al especificar un objeto válido en el parámetro de destino, este método detiene la entrega de los eventos especificados a todos los métodos de acción asociados con ese objeto.

  2. Al especificar nil para el parámetro de destino, este método evita la entrega de esos eventos a todos los métodos de acción de todos los objetos de destino

    C objetivo:

    [_myButton removeTarget:  //any validObject (or) nil
                  action:nil
        forControlEvents:UIControlEventAllEvents]; 

    rápido:

    myButton.removeTarget(*validObject or nil*, action:nil, forControlEvents:UIControlEvents.AllEvents)

Para más detalles https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.