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ć?
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)
Odpowiedź @ progrmr w Swift 2:
i Swift 3:
Uwaga: Swift nie ma
NULL
, więc przetestowałem jego wymianęnil
i wydaje się, że działa dobrze.źródło
removeTarget(nil, action: nil, for: .allEvents)
nil
alboNULL
do 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).Szybki:
źródło
Swift 2:
Swift 3 i 4:
Cel C:
Mam nadzieję, że to pomoże.
źródło
Ta metoda zatrzymuje dostarczanie zdarzeń do określonego obiektu docelowego.
Określając poprawny obiekt w parametrze docelowym, ta metoda zatrzymuje dostarczanie określonych zdarzeń do wszystkich metod akcji powiązanych z tym obiektem.
Podając zero dla parametru docelowego, ta metoda zapobiega dostarczaniu tych zdarzeń do wszystkich metod działania wszystkich obiektów docelowych
cel C:
szybki:
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 :
źródło