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ć?

SK9
źródło

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)
progrmr
źródło
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.

Hlung
źródło
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)
Iya
źródło
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.

Riajur Rahman
źródło
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 :

UdayM
źródło