调用 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)
和斯威夫特 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)
斯威夫特 3 和 4:
actionButton.removeTarget(nil, action: nil, for: .allEvents)
目标-C:
[actionButton removeTarget: nil action: NULL forControlEvents: UIControlEventAllEvents];
- 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)
如果有条件,您可以更改选择器。见下面的例子
您可以先删除所有目标,然后选择选择器并添加它。
rateButton.removeTarget(nil, action: nil, for: .allEvents)
let action = interview.isRated ? #selector(viewTapped(_:)) : #selector(rateTapped(_:))
rateButton.addTarget(self, action: action, for: .touchUpInside)