【发布时间】:2011-03-21 10:16:55
【问题描述】:
我已将多个 target-action-forControlEvents: 添加到 UIButton。我想一次性删除所有这些而不释放任何东西。然后我会设定新的目标。
这可能吗?我该怎么做?
【问题讨论】:
我已将多个 target-action-forControlEvents: 添加到 UIButton。我想一次性删除所有这些而不释放任何东西。然后我会设定新的目标。
这可能吗?我该怎么做?
【问题讨论】:
调用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)
【讨论】:
@progrmr 在 Swift 2 中的回答:
button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)
和 Swift 3:
button.removeTarget(nil, action: nil, for: .allEvents)
注意:Swift 没有NULL,所以我测试了用nil 替换它,它似乎工作正常。
【讨论】:
removeTarget(nil, action: nil, for: .allEvents)
nil 或 NULL 传递给 Objective-C 中的第一个和第二个参数,它会工作。我相信两者都被定义为(void*) 0(或者至少,评估为相等)。
斯威夫特 3、4、5:
btnCancel.removeTarget(nil, action: nil, forControlEvents: UIControlEvents.AllEvents)
【讨论】:
斯威夫特 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];
【讨论】:
- removeTarget:action:forControlEvents:
此方法停止向指定目标对象传递事件。
在目标参数中指定一个有效对象,此方法会停止将指定事件传递给与该对象关联的所有操作方法。
为目标参数指定nil,此方法可防止将这些事件传递给所有目标对象的所有操作方法
目标-c:
[_myButton removeTarget: //any validObject (or) nil
action:nil
forControlEvents:UIControlEventAllEvents];
斯威夫特:
myButton.removeTarget(*validObject or nil*, action:nil, forControlEvents:UIControlEvents.AllEvents)
【讨论】:
如果是有条件的,您可以更改选择器。 看下面的例子
您可以先删除所有目标,然后选择选择器并添加它。
rateButton.removeTarget(nil, action: nil, for: .allEvents)
let action = interview.isRated ? #selector(viewTapped(_:)) : #selector(rateTapped(_:))
rateButton.addTarget(self, action: action, for: .touchUpInside)
【讨论】: