UIButton ลบการกระทำเป้าหมายทั้งหมด


341

ฉันได้เพิ่ม target-action-forControlEvents: ลงใน UIButton แล้ว ฉันต้องการลบสิ่งเหล่านี้ทั้งหมดในครั้งเดียวโดยไม่ต้องจัดสรรคืน ฉันจะตั้งเป้าหมายใหม่

เป็นไปได้และฉันจะไปเกี่ยวกับเรื่องนี้?

คำตอบ:


824

โทรRemoveTarget: action: forControlEvents:,ส่งผ่านศูนย์สำหรับเป้าหมาย, NULL สำหรับการดำเนินการและใช้หน้ากากควบคุมที่ตั้งค่าบิตทั้งหมด (UIControlEventAllEvents)

Objective-C

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

สวิฟท์ 2

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

สวิฟท์ 3

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

4
ขอบคุณสำหรับทิป! นี่คือลิงก์แบบเต็มที่ฉันคิดว่า (เช่นไปยังส่วน): " developer.apple.com/iphone/library/documentation/uikit/… :"
SK9

1
แน่นอนคำแนะนำของงาน progrmr แน่นอน เพื่อเพิ่มคำตอบที่นี่เป็นข้อมูลโค้ดเหมือนที่ฉันต้องการ: [button removeTarget: nil action: NULL forControlEvents: UIControlEventTouchUpInside];
SK9

6
นอกเหนือ: เมธอด -allTargets ส่งคืน NSSet ของเป้าหมายทั้งหมดของอินสแตนซ์ (ไม่มีหากไม่มี)
SK9

3
ที่สมบูรณ์แบบ! สิ่งที่ฉันกำลังมองหา: D
Totumus Maximus

1
อัปเดตด้วย Swift 2 และ 3 เนื่องจากมีคำตอบที่แข่งขันกันด้วยคำตอบเดียวกันทุกประการแตกต่างกันในภาษา
Peter DeWeese

92

คำตอบของ @ progrmr ใน Swift 2:

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

และรวดเร็ว 3:

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

หมายเหตุ: Swift ไม่มีNULLดังนั้นฉันทดสอบแทนที่ด้วยnilและดูเหมือนว่าจะทำงานได้ดี


5
สำหรับ Swift 3: ".AllEvents" คือตอนนี้ ". allEvents" (ด้วยตัวพิมพ์เล็ก 'a'):removeTarget(nil, action: nil, for: .allEvents)
Sasho

เกี่ยวกับหมายเหตุของคุณ: จริงๆแล้วผมเชื่อว่าคุณสามารถผ่านการอย่างใดอย่างหนึ่งnilหรือNULLจะทั้งการขัดแย้งครั้งแรกและครั้งที่สองใน Objective-C เกินไปและมันจะทำงาน ฉันเชื่อว่าทั้งสองถูกกำหนดเป็น(void*) 0(หรืออย่างน้อยที่สุดประเมินว่าเท่ากับ)
Nicolas Miari

@Sasho ฉันชอบที่จะเห็นสถิติเกี่ยวกับขนาดไฟล์ต้นฉบับที่ลดลง (โดยเฉลี่ย) เมื่ออัปเกรดเป็น Swift 3 :-) (เนื่องจากวิธีการใหม่ / กฎการตั้งชื่ออาร์กิวเมนต์)
Nicolas Miari

เนื่องจากนี่เป็นคำตอบเดียวกันในภาษาอื่นและภาษาไม่ได้ถูกแท็กในคำถามนี้จึงควรแก้ไขคำตอบของ @ progrmr
Peter DeWeese

6

สวิฟท์:

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

โปรดระบุภาษาที่คุณใช้ครอบคลุม
Juan Boero

@ JuanPabloBoero มันรวดเร็ว
Iya

3

สวิฟท์ 2:

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

สวิฟท์ 3 และ 4:

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

Objective-C:

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

หวังว่ามันจะช่วย


2
- removeTarget:action:forControlEvents:

วิธีนี้จะหยุดการส่งเหตุการณ์ไปยังวัตถุเป้าหมายที่ระบุ

  1. การระบุวัตถุที่ถูกต้องในพารามิเตอร์เป้าหมายวิธีนี้จะหยุดการนำส่งเหตุการณ์ที่ระบุไปยังวิธีการดำเนินการทั้งหมดที่เกี่ยวข้องกับวัตถุนั้น

  2. การระบุศูนย์สำหรับพารามิเตอร์เป้าหมายวิธีนี้จะป้องกันการส่งมอบเหตุการณ์เหล่านั้นไปยังวิธีการดำเนินการทั้งหมดของวัตถุเป้าหมายทั้งหมด

    วัตถุประสงค์ C:

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

    รวดเร็ว:

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

สำหรับรายละเอียดเพิ่มเติม https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.