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?

SK9
sumber

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)
program
sumber
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.

Hung
sumber
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)
Iya
sumber
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.

Riajur Rahman
sumber
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 :

UdayM
sumber