UIButton删除所有目标动作


341

我已将多个target-action-forControlEvents:添加到UIButton。我想一次性删除所有这些而不分配任何东西。然后,我将设定新的目标。

这可能吗,我该怎么做?

Answers:


823

调用removeTarget:action:forControlEvents:,为目标传递nil,为操作传递NULL,并使用设置所有位的控制掩码(UIControlEventAllEvents)。

目标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 2010年

1
当然,progrmr的建议有效。要添加到答案中,这里是一个类似于我所需的代码段:[button removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
SK9

6
另外:-allTargets实例方法返回所有实例目标的NSSet(如果没有,则为nil)。
SK9

3
完善!正是我在寻找:D
Totumus Maximus 2011年

1
随着Swift 2和Swift 3的更新,因为存在完全相同答案的竞争性答案,只是语言有所不同。
Peter DeWeese

92

@progrmr在Swift 2中的答案:

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

和Swift 3:

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

注意:Swift没有NULL,因此我测试了将其替换为,nil并且看起来工作正常。


5
对于Swift 3:“。AllEvents”现在是“ .allEvents”(带有小写的“ a”):removeTarget(nil, action: nil, for: .allEvents)
Sasho

关于你的注意:实际上,我相信你可以通过其中nilNULL双方在Objective-C的第一和第二个参数太多,它会工作。我相信两者均被定义为(void*) 0(或至少评估为相等)。
Nicolas Miari's

@Sasho我很乐意看到一些统计信息,这些统计数据表明在升级到Swift 3时,源文件的大小平均减少了(-)(由于新的方法/参数命名规则)。
Nicolas Miari '16

由于这是使用不同语言的相同答案,并且该语言未在该问题中标记,因此应该对@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)

Swift 3和4:

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

目标C:

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

希望能帮助到你。


2
- removeTarget:action:forControlEvents:

此方法停止将事件传递到指定的目标对象。

  1. 在目标参数中指定有效对象后,此方法将停止将指定的事件传递给与该对象关联的所有操作方法。

  2. 为目标参数指定nil时,此方法可防止将这些事件传递给所有目标对象的所有操作方法

    目标-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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.