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

这可能吗,我该怎么做?

#1 楼

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

迅速2
button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)

Swift 3或更高版本
button.removeTarget(nil, action: nil, for: .allEvents)


评论


谢谢你的提示!这是我认为的完整链接(即指向该部分):“developer.apple.com/iphone/library/documentation/uikit/…:”

– SK9
10年7月27日在6:36



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

– SK9
10年7月27日在6:48



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

– SK9
10年7月28日在0:26

完善!正是我在寻找什么:D

– Totumus Maximus
11-10-18在7:35

使用Swift 2和3更新,因为存在一些竞争性答案,答案完全相同,只是语言有所不同。

– Peter DeWeese
17年8月29日在19:31

#2 楼

@progrmr在Swift 2中的答案:

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


和Swift 3:

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


注意:Swift不会没有NULL,所以我测试了用nil替换它,它似乎可以正常工作。

评论


对于Swift 3:“。AllEvents”现在是“ .allEvents”(小写字母“ a”):removeTarget(nil,action:nil,for:.allEvents)

– Sasho
16-09-16在5:39



关于您的注释:实际上,我相信您也可以将nil或NULL传递给Objective-C中的第一个和第二个参数,并且它将起作用。我相信两者都定义为(void *)0(或至少等于)。

–尼古拉斯·米亚里(Nicolas Miari)
16年11月25日在5:16

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

–尼古拉斯·米亚里(Nicolas Miari)
16年11月25日在5:18

由于这是使用不同语言的相同答案,并且该语言未在该问题中标记,因此应该对@progrmr的答案进行编辑。

– Peter DeWeese
17年8月29日在19:24

#3 楼

斯威夫特:

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


评论


请指明您使用的语言

– Juan Boero
16年1月18日在20:52

@JuanPabloBoero,很快

– Iya
16年1月19日在6:40

#4 楼

Swift 2:

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


Swift 3和4:

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


Objective-C:

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


希望对您有所帮助。

#5 楼

- removeTarget:action:forControlEvents:


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


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

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

objective-c:

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


swift:

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: