UIButton xóa tất cả các hành động đích


341

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 thứ này trong một lần mà không giải quyết bất cứ điều gì. Sau đó tôi sẽ đặt mục tiêu mới.

Điều này là có thể và làm thế nào để tôi đi về nó?

Câu trả lời:


823

Gọi removeTarget: action: forControlEvents : , pass nil cho đích, NULL cho hành động và sử dụng mặt nạ điều khiển đặt tất cả các bit (UIControlEventAllEvents).

Mục tiêu-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
Cảm ơn vì tiền hỗ trợ! Đây là liên kết đầy đủ mà tôi nghĩ (ví dụ: đến phần): " developer.apple.com/iphone/l
Library / document / uikit / trộm

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

6
Ngoài ra: phương thức cá thể -allTarget trả về một NSSet của tất cả các mục tiêu của thể hiện (nil nếu không có).
SK9

3
Hoàn hảo! chính xác những gì tôi đang tìm kiếm: D
Totumus Maximus

1
Được cập nhật với Swift 2 và 3, vì có những câu trả lời cạnh tranh với cùng một câu trả lời, chỉ khác nhau về ngôn ngữ.
Peter De Weese

92

Câu trả lời của @ 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ó nilvà nó dường như hoạt động tốt.


5
Đối với Swift 3: ". ALLEvents" hiện là ".allEvents" (với chữ thường 'a'):removeTarget(nil, action: nil, for: .allEvents)
Sasho

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

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

Vì đây là cùng một câu trả lời trong một ngôn ngữ khác và ngôn ngữ không được gắn thẻ trong câu hỏi này, nên nó sẽ là một chỉnh sửa cho câu trả lời của @ progrmr.
Peter De Weese

6

Nhanh:

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

vui lòng cho biết bạn đang nói ngôn ngữ nào
Juan Boero

@ JuanPabloBoero, nó rất nhanh
Iya

3

Swift 2:

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

Swift 3 & 4:

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

Mục tiêu-C:

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

Hy vọng nó giúp.


2
- removeTarget:action:forControlEvents:

Phương thức này dừng việc phân phối các sự kiện đến đối tượng đích đã chỉ định.

  1. Chỉ định một đối tượng hợp lệ trong tham số đích, phương thức này dừng phân phối các sự kiện đã chỉ định cho tất cả các phương thức hành động được liên kết với đối tượng đó.

  2. Chỉ định nil cho tham số đích, phương thức này ngăn việc phân phối các sự kiện đó đến tất cả các phương thức hành động của tất cả các đối tượng đích

    mục tiêu-c:

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

    nhanh:

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

Để biết thêm chi tiết https://developer.apple.com/l Library / ios / document / UIKit / Reference / UIControl_Class / index.html # / // numplef /occ / instmm / UIControl / remToveTarget : action : forControlEvents :

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.