UIButton entfernt alle Zielaktionen

341

Ich habe einem UIButton mehrere target-action-forControlEvents: hinzugefügt. Ich möchte all dies auf einmal entfernen, ohne etwas freizugeben. Ich werde dann neue Ziele setzen.

Ist das möglich und wie gehe ich vor?

SK9
quelle

Antworten:

823

Rufen Sie removeTarget: action: forControlEvents: auf , übergeben Sie nil für das Ziel, NULL für action und verwenden Sie eine Kontrollmaske, die alle Bits setzt (UIControlEventAllEvents).

Ziel 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)
Progrmr
quelle
4
Danke für den Tipp! Hier ist der vollständige Link, den ich denke (dh zum Abschnitt): " developer.apple.com/iphone/library/documentation/uikit/… :"
SK9
1
Der Vorschlag von Progrmr funktioniert natürlich. Um der Antwort hier etwas hinzuzufügen, gibt es ein Code-Snippet wie das, das ich brauchte: [button removeTarget: nil action: NULL forControlEvents: UIControlEventTouchUpInside];
SK9
6
Nebenbei: Die Instanzmethode -allTargets gibt ein NSSet aller Ziele der Instanz zurück (null, wenn keine).
SK9
3
Perfekt! genau das, wonach ich gesucht habe: D
Totumus Maximus
1
Aktualisiert mit Swift 2 und 3, da es konkurrierende Antworten mit genau derselben Antwort gibt, die sich nur in der Sprache unterscheiden.
Peter DeWeese
92

Antwort von @progrmr in Swift 2:

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

und Swift 3:

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

Hinweis: Swift hat keine NULL, also habe ich getestet, es durch zu ersetzen, nilund es scheint gut zu funktionieren.

Hlung
quelle
5
Für Swift 3: ".AllEvents" ist jetzt ".allEvents" (mit einem Kleinbuchstaben "a"):removeTarget(nil, action: nil, for: .allEvents)
Sasho
In Bezug auf Ihren HINWEIS: Eigentlich glaube ich , Sie entweder passieren könnten niloder NULLzu beiden den ersten und zweiten Argumenten in Objective-C zu, und es wird funktionieren. Ich glaube, beide sind definiert als (void*) 0(oder zumindest als gleich bewertet).
Nicolas Miari
@Sasho Ich würde gerne einige Statistiken darüber sehen, wie viel Quelldateigrößen (im Durchschnitt) beim Upgrade auf Swift 3 abnehmen :-) (aufgrund der neuen Regeln für die Benennung von Methoden / Argumenten).
Nicolas Miari
Da dies dieselbe Antwort in einer anderen Sprache ist und die Sprache in dieser Frage nicht markiert ist, sollte die Antwort von @progrmr bearbeitet werden.
Peter DeWeese
6

Schnell:

btnCancel.removeTarget(self, action: Selector(), forControlEvents: UIControlEvents.AllEvents)
Iya
quelle
Bitte geben Sie an, welche Sprache Sie behandeln
Juan Boero
@ JuanPabloBoero, es ist schnell
Iya
3

Swift 2:

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

Swift 3 & 4:

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

Ziel c:

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

Ich hoffe es hilft.

Riajur Rahman
quelle
2
- removeTarget:action:forControlEvents:

Diese Methode stoppt die Übermittlung von Ereignissen an das angegebene Zielobjekt.

  1. Durch Angabe eines gültigen Objekts im Zielparameter stoppt diese Methode die Übermittlung der angegebenen Ereignisse an alle diesem Objekt zugeordneten Aktionsmethoden.

  2. Diese Methode gibt nil für den Zielparameter an und verhindert die Übermittlung dieser Ereignisse an alle Aktionsmethoden aller Zielobjekte

    Ziel c:

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

    schnell:

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

Weitere Informationen finden Sie unter https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

UdayM
quelle