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.