UIButton menghapus semua aksi target


341

Saya telah menambahkan beberapa target-action-forControlEvents: ke UIButton. Saya ingin menghapus semua ini dalam satu jalan tanpa membatalkan apa pun. Saya kemudian akan menetapkan target baru.

Apakah ini mungkin dan bagaimana saya melakukannya?

Jawaban:


824

Panggil removeTarget: action: forControlEvents:, berikan nil untuk target, NULL untuk aksi, dan gunakan masker kontrol yang menetapkan semua bit (UIControlEventAllEvents).

Objektif-C

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

Cepat 2

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

Cepat 3

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

4
Terima kasih atas tipnya! Berikut ini tautan lengkap yang saya kira (mis.
Ke

1
Saran progrmr tentu saja berfungsi. Untuk menambahkan jawaban di sini adalah potongan kode seperti yang saya butuhkan: [tombol removeTarget: aksi nil: NULL forControlEvents: UIControlEventTouchUpInside];
SK9

6
Selain itu: metode instance -allTarget mengembalikan NSSet dari semua target instance (nil jika tidak ada).
SK9

3
Sempurna! persis apa yang saya cari: D
Totumus Maximus

1
Diperbarui dengan Swift 2 dan 3, karena ada jawaban yang bersaing dengan jawaban yang persis sama, hanya berbeda dalam bahasa.
Peter DeWeese

92

@ jawaban progrmr dalam Swift 2:

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

dan Swift 3:

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

Catatan: Swift tidak punya NULL, jadi saya diuji menggantinya nildan sepertinya berfungsi dengan baik.


5
Untuk Swift 3: ".AllEvents" sekarang ".allEvents" (dengan huruf kecil 'a'):removeTarget(nil, action: nil, for: .allEvents)
Sasho

Mengenai CATATAN Anda: Sebenarnya, saya percaya Anda bisa lulus baik nilatau NULLuntuk kedua argumen pertama dan kedua di Objective-C juga, dan itu akan bekerja. Saya percaya keduanya didefinisikan sebagai (void*) 0(atau paling tidak, mengevaluasi sama dengan).
Nicolas Miari

@ Sasho Saya akan senang melihat beberapa statistik tentang seberapa banyak ukuran file sumber turun (rata-rata) ketika meningkatkan ke Swift 3 :-) (karena aturan penamaan metode / argumen baru).
Nicolas Miari

Karena ini adalah jawaban yang sama dalam bahasa yang berbeda, dan bahasa ini tidak ditandai pada pertanyaan ini, itu harus merupakan edit untuk jawaban @ progrmr.
Peter DeWeese

6

Cepat:

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

tolong tunjukkan bahasa mana yang Anda liput
Juan Boero

@ JuanPabloBoero, cepat sekali
Iya

3

Swift 2:

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

Swift 3 & 4:

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

Tujuan-C:

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

Semoga ini bisa membantu.


2
- removeTarget:action:forControlEvents:

Metode ini menghentikan pengiriman peristiwa ke objek target yang ditentukan.

  1. Menentukan objek yang valid dalam parameter target, metode ini menghentikan pengiriman peristiwa yang ditentukan ke semua metode tindakan yang terkait dengan objek itu.

  2. Menentukan nil untuk parameter target, metode ini mencegah pengiriman peristiwa tersebut ke semua metode tindakan semua objek target

    tujuan-c:

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

    cepat:

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

Untuk detail lebih lanjut https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.