UIButton tüm hedef eylemleri kaldır


341

Birden çok hedef-eylem-forControlEvents: bir UIButton ekledim. Bunların hepsini bir şey bırakmadan tek seferde kaldırmak istiyorum. Daha sonra yeni hedefler belirleyeceğim.

Bu mümkün mü ve nasıl devam ederim?

Yanıtlar:


824

RemoveTarget: action: forControlEvents: öğesini çağırın , hedef için nil, action için NULL değerini çağırın ve tüm bitleri ayarlayan bir kontrol maskesi kullanın (UIControlEventAllEvents).

Objective-C

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

Hızlı 2

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

Hızlı 3

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

4
Bahşiş için teşekkürler! Sanırım tam bağlantı (yani bölüme): " developer.apple.com/iphone/library/documentation/uikit/… :"
SK9

1
progrmr'ın önerisi elbette. Burada cevaba eklemek için ihtiyacım gibi bir kod pasajı: [button removeTarget: nil eylem: NULL forControlEvents: UIControlEventTouchUpInside];
SK9

6
Kenara: -allTargets örnek yöntemi tüm örnek hedeflerinin bir NSSet'ini döndürür (yok ise nil).
SK9

3
Mükemmel! tam olarak aradığım şey: D
Totumus Maximus

1
Swift 2 ve 3 ile güncellendi, çünkü tam olarak aynı cevapta, sadece dilde farklılık gösteren rakip cevaplar var.
Peter DeWeese

92

@ progrmr'ın Swift 2'deki yanıtı:

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

ve Swift 3:

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

Not: Swift'in yok NULL, bu yüzden değiştirmeyi test ettim nilve iyi çalışıyor gibi görünüyor.


5
Swift 3 için: ".AllEvents" şimdi ".allEvents" (küçük harfli 'a' ile):removeTarget(nil, action: nil, for: .allEvents)
Sasho

NOT ile ilgili: Aslında, Objective-C'deki birinci ve ikinci argümanlardan birini nilya NULLda ikisini birden aktarabileceğinize inanıyorum ve işe yarayacaktır. Her ikisinin de (void*) 0eşit olarak tanımlandığına inanıyorum (veya en azından eşit olarak değerlendiriniz).
Nicolas Miari

@Sasho Swift 3 :-) (yeni yöntem / bağımsız değişken adlandırma kuralları nedeniyle) sürümüne geçerken kaynak dosya boyutlarının ne kadar düştüğüne (ortalama olarak) ilişkin bazı istatistikleri görmek isterim.
Nicolas Miari

Bu, farklı bir dilde aynı yanıt olduğundan ve dil bu soruda etiketlenmediğinden, @ progrmr'ın yanıtında bir düzenleme olması gerekir.
Peter DeWeese

6

Swift:

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

lütfen hangi dili kapsadığınızı
belirtin

@ JuanPabloBoero, hızlı
Iya

3

Hızlı 2:

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

Hızlı 3 ve 4:

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

Objective-C:

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

Umarım yardımcı olur.


2
- removeTarget:action:forControlEvents:

Bu yöntem, olayların belirtilen hedef nesneye teslimini durdurur.

  1. Target parametresinde geçerli bir nesne belirtildiğinde, bu yöntem belirtilen olayların o nesneyle ilişkili tüm eylem yöntemlerine teslimini durdurur.

  2. Target parametresi için nil belirtildiğinde , bu yöntem bu olayların tüm hedef nesnelerin tüm eylem yöntemlerine dağıtılmasını önler

    Amaç-c:

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

    swift:

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

Daha fazla ayrıntı için https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.