UIButton rimuove tutte le azioni-bersaglio


341

Ho aggiunto più target-action-forControlEvents: a un UIButton. Vorrei rimuovere tutti questi in una volta sola senza deallocare nulla. Stabilirò quindi nuovi obiettivi.

È possibile e come posso procedere?

Risposte:


824

Chiama removeTarget: action: forControlEvents:, passa zero per la destinazione, NULL per l'azione e usa una maschera di controllo che imposta tutti i bit (UIControlEventAllEvents).

Objective-C

[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)

4
Grazie per il consiglio! Ecco il link completo che penso (es.
Alla

1
Il suggerimento di progrmr funziona ovviamente. Per aggiungere alla risposta qui c'è un frammento di codice come quello di cui avevo bisogno: [button removeTarget: zero action: NULL forControlEvents: UIControlEventTouchUpInside];
SK9,

6
A parte: il metodo dell'istanza -allTargets restituisce un NSSet di tutte le destinazioni dell'istanza (zero se nessuna).
SK9,

3
Perfetto! esattamente quello che stavo cercando: D
Totumus Maximus,

1
Aggiornato con Swift 2 e 3, in quanto vi sono risposte concorrenti esattamente con la stessa risposta, che differiscono solo per la lingua.
Peter DeWeese,

92

La risposta di @ progrmr in Swift 2:

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

e Swift 3:

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

Nota: Swift non ha NULL, quindi ho provato a sostituirlo con nile sembra funzionare bene.


5
Per Swift 3: ".AllEvents" ora è ".allEvents" (con una "a" minuscola):removeTarget(nil, action: nil, for: .allEvents)
Sasho,

Per quanto riguarda la nota: In realtà, credo che si potrebbe passare sia nilo NULLper entrambi il primo e il secondo argomento in Objective-C troppo, e funzionerà. Credo che entrambi siano definiti come (void*) 0(o almeno valutati come uguali).
Nicolas Miari,

@Sasho Mi piacerebbe vedere alcune statistiche su quante dimensioni dei file di origine diminuiscono (in media) durante l'aggiornamento a Swift 3 :-) (a causa delle nuove regole di denominazione del metodo / argomento).
Nicolas Miari,

Poiché questa è la stessa risposta in un'altra lingua e la lingua non è taggata in questa domanda, dovrebbe essere una modifica alla risposta di @ progrmr.
Peter DeWeese,

6

Swift:

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

si prega di indicare quale lingua stai coprendo
Juan Boero

@ JuanPabloBoero, è veloce
Iya

3

Swift 2:

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

Swift 3 e 4:

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

Objective-C:

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

Spero che sia d'aiuto.


2
- removeTarget:action:forControlEvents:

Questo metodo interrompe la consegna degli eventi all'oggetto target specificato.

  1. Specificando un oggetto valido nel parametro target, questo metodo interrompe il recapito degli eventi specificati a tutti i metodi di azione associati a tale oggetto.

  2. Specificando zero per il parametro target, questo metodo impedisce la consegna di quegli eventi a tutti i metodi di azione di tutti gli oggetti target

    Objective-C:

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

    sWIFT:

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

Per maggiori dettagli https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.