UIButton remove todas as ações de destino

341

Eu adicionei vários target-action-forControlEvents: a um UIButton. Gostaria de remover tudo isso de uma só vez, sem desalocar nada. Vou então definir novos alvos.

Isso é possível e como faço para fazer isso?

SK9
fonte

Respostas:

824

Chame removeTarget: action: forControlEvents:, passe nulo para o destino, NULL para ação e use uma máscara de controle que define todos os bits (UIControlEventAllEvents).

Objetivo-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
fonte
4
Obrigado pela dica! Aqui está o link completo que eu acho (ou seja, para a seção): " developer.apple.com/iphone/library/documentation/uikit/… :"
SK9
11
a sugestão do progrmr funciona, é claro. Para adicionar à resposta, aqui está um trecho de código como o que eu precisava: [button removeTarget: nil action: NULL forControlEvents: UIControlEventTouchUpInside];
SK9 27/07/10
6
Além disso: o método da instância -allTargets retorna um NSSet de todos os destinos da instância (nulo se nenhum).
SK9 28/07/10
3
Perfeito! exatamente o que eu estava procurando: D
Totumus Maximus 18/10/11
11
Atualizado com Swift 2 e 3, pois existem respostas concorrentes com exatamente a mesma resposta, diferindo apenas no idioma.
Peter DeWeese 29/08
92

A resposta de @ progrmr no Swift 2:

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

e Swift 3:

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

Nota: Swift não possui NULL, então testei substituí-lo nile parece funcionar bem.

Hlung
fonte
5
Para Swift 3: ".AllEvents" agora é ".allEvents" (com 'a' minúsculo):removeTarget(nil, action: nil, for: .allEvents)
Sasho
Quanto à sua NOTA: Na verdade, eu acredito que você poderia passar tanto nilou NULLpara ambos os primeiro e segundo argumentos em Objective-C também, e ele vai trabalhar. Eu acredito que ambos são definidos como (void*) 0(ou pelo menos, avaliar como iguais).
Nicolas Miari 25/11
@ Sasho Eu adoraria ver algumas estatísticas sobre o tamanho dos arquivos de origem diminuir (em média) ao atualizar para o Swift 3 :-) (devido às novas regras de nomenclatura de métodos / argumentos).
Nicolas Miari 25/11
Como esta é a mesma resposta em um idioma diferente e o idioma não está marcado nesta pergunta, deve ser uma edição da resposta do @ progrmr.
Peter DeWeese 29/08
6

Rápido:

btnCancel.removeTarget(self, action: Selector(), forControlEvents: UIControlEvents.AllEvents)
Iya
fonte
indique qual idioma você está cobrindo
Juan Boero
@ JuanPabloBoero, é rápido
Iya
3

Swift 2:

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

Swift 3 e 4:

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

Objetivo-C:

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

Espero que ajude.

Riajur Rahman
fonte
2
- removeTarget:action:forControlEvents:

Este método interrompe a entrega de eventos para o objeto de destino especificado.

  1. Especificando um objeto válido no parâmetro target, esse método interrompe a entrega dos eventos especificados para todos os métodos de ação associados a esse objeto.

  2. Especificando zero para o parâmetro target, esse método impede a entrega desses eventos a todos os métodos de ação de todos os objetos de destino.

    objetivo-c:

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

    rápido:

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

Para obter mais detalhes https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

UdayM
fonte