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?

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)

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.


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)

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.


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 :

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.