2010-07-27 31 views
295

Tôi đã thêm nhiều mục tiêu-hành động-forControlEvents: vào một UIButton. Tôi muốn loại bỏ tất cả những điều này trong một lần mà không cần deallocating bất cứ điều gì. Sau đó tôi sẽ đặt mục tiêu mới.UIButton xóa tất cả các mục tiêu hành động

Điều này có thể thực hiện được không và tôi phải làm thế nào?

Trả lời

719

Gọi removeTarget:action:forControlEvents:, chuyển số không cho mục tiêu, NULL cho hành động và sử dụng mặt nạ điều khiển đặt tất cả bit (UIControlEventAllEvents).

Objective-C

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

Swift 2

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

Swift 3

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

Xin chân thành cảm ơn! Đây là liên kết đầy đủ mà tôi nghĩ (ví dụ: với phần): "http://developer.apple.com/iphone/library/documentation/uikit/reference/UIControl_Class/Reference/Reference.html#//apple_ref/occ/instm/UIControl/removeTarget: action: forControlEvents: " – SK9

+1

đề xuất của progrmr tất nhiên.Để thêm vào câu trả lời ở đây là đoạn mã giống như đoạn tôi cần: [nút removeTarget: nil hành động: NULL forControlEvents: UIControlEventTouchUpInside]; – SK9

+6

Bên cạnh: phương thức thể hiện-allTargets trả về một NSSet của tất cả các mục tiêu của cá thể (không nếu không có). – SK9

91

@ câu trả lời progrmr trong Swift 2:

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

và Swift 3:

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

Lưu ý: Swift không có NULL, vì vậy tôi đã thử nghiệm thay thế nó bằng nil và có vẻ như để làm việc tốt.

+5

Đối với Swift 3: ".AllEvents" bây giờ là ".allEvents" (với chữ thường 'a'): 'removeTarget (nil, action: nil, for: .allEvents)' – Sasho

+0

Về LƯU Ý của bạn: Thực ra, tôi tin bạn có thể vượt qua 'nil' hoặc' NULL' để ** cả ** đối số đầu tiên và thứ hai trong Objective-C, và nó sẽ hoạt động. Tôi tin rằng cả hai đều được định nghĩa là '(void *) 0' (hoặc ít nhất, đánh giá là bằng). –

+0

@Sasho Tôi rất thích xem một số số liệu thống kê về kích thước của các tệp nguồn đi xuống (trung bình) khi nâng cấp lên Swift 3 :-) (do các quy tắc đặt tên đối số/phương thức mới). –

6

Swift:

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

vui lòng cho biết bạn đang bao gồm ngôn ngữ nào –

+0

@ JuanPabloBoero, nó nhanh chóng – Iya

2
- removeTarget:action:forControlEvents: 

Phương pháp này dừng việc cung cấp các sự kiện để các đối tượng mục tiêu cụ thể.

  1. Chỉ định đối tượng hợp lệ trong tham số mục tiêu, phương pháp này dừng việc cung cấp các sự kiện quy định cho tất cả các phương pháp hành động liên quan đến đối tượng đó.

  2. Xác định nil cho tham số mục tiêu, phương pháp này ngăn chặn việc cung cấp những sự kiện cho tất cả các phương pháp hành động của tất cả các mục tiêu đối tượng

    Objective-C:

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

    nhanh chóng:

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

Để biết thêm chi tiết https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents:

Các vấn đề liên quan