UIButton usuwa wszystkie akcje docelowe


341

Dodałem wiele funkcji target-action-forControlEvents: do UIButton. Chciałbym usunąć je wszystkie za jednym razem, bez cofania przydziału. Następnie ustalę nowe cele.

Czy to możliwe i jak to zrobić?

Odpowiedzi:


824

Wywołaj removeTarget: action: forControlEvents:, podaj zero dla celu, NULL dla akcji i użyj maski kontrolnej, która ustawia wszystkie bity (UIControlEventAllEvents).

Cel C

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

Swift 2

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

Szybki 3

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

4
Dzięki za wskazówkę! Oto pełny link, który moim zdaniem (tj. Do sekcji): „ developer.apple.com/iphone/library/documentation/uikit/… :”
SK9

1
Oczywiście sugestia progrmra działa. Do odpowiedzi należy dodać fragment kodu, taki jak ten, którego potrzebowałem: [przycisk removeTarget: zero akcja: NULL forControlEvents: UIControlEventTouchUpInside];
SK9,

6
Poza tym: metoda instancji -allTargets zwraca NSSet wszystkich celów instancji (zero, jeśli nie ma).
SK9

3
Doskonały! dokładnie to, czego szukałem: D
Totumus Maximus

1
Zaktualizowano z Swift 2 i 3, ponieważ istnieją konkurencyjne odpowiedzi z dokładnie taką samą odpowiedzią, różniące się tylko językiem.
Peter DeWeese,

92

Odpowiedź @ progrmr w Swift 2:

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

i Swift 3:

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

Uwaga: Swift nie ma NULL, więc przetestowałem jego wymianę nili wydaje się, że działa dobrze.


5
W przypadku Swift 3: „.AllEvents” to teraz „.allEvents” (z małą „a”):removeTarget(nil, action: nil, for: .allEvents)
Sasho

Jeśli chodzi o notatkę: Właściwie, wierzę, można przejść albo nilalbo NULLdo obu pierwszych i drugich argumentów w Objective-C też, i to będzie działać. Uważam, że oba są zdefiniowane jako (void*) 0(lub przynajmniej oceniają jako równe).
Nicolas Miari,

@Sasho Chciałbym zobaczyć statystyki dotyczące zmniejszenia rozmiarów plików źródłowych (średnio) podczas aktualizacji do Swift 3 :-) (z powodu nowej metody nazewnictwa metod / argumentów).
Nicolas Miari,

Ponieważ jest to ta sama odpowiedź w innym języku, a język nie jest oznaczony w tym pytaniu, powinna to być edycja odpowiedzi @ progrmr.
Peter DeWeese,

6

Szybki:

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

proszę wskazać, który język obejmujecie
Juan Boero,

@ JuanPabloBoero, jest szybki
Iya

3

Swift 2:

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

Swift 3 i 4:

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

Cel C:

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

Mam nadzieję, że to pomoże.


2
- removeTarget:action:forControlEvents:

Ta metoda zatrzymuje dostarczanie zdarzeń do określonego obiektu docelowego.

  1. Określając poprawny obiekt w parametrze docelowym, ta metoda zatrzymuje dostarczanie określonych zdarzeń do wszystkich metod akcji powiązanych z tym obiektem.

  2. Podając zero dla parametru docelowego, ta metoda zapobiega dostarczaniu tych zdarzeń do wszystkich metod działania wszystkich obiektów docelowych

    cel C:

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

    szybki:

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

Aby uzyskać więcej informacji https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.