我已经为一个UIButton添加了多个target-action-forControlEvents:。我想去除所有这些在一个去不脱销任何东西。然后我会设定新的目标。
这可能吗?我该怎么做?
调用removeTarget:行动: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)
@ program在Swift 2中的回答:
Swift 3:
注意:Swift没有NULL,所以我测试用nil替换它,它似乎工作得很好。
NULL
nil
Swift 3,4,5:
btnCancel.removeTarget(nil, action: nil, forControlEvents: UIControlEvents.AllEvents)
- removeTarget:action:forControlEvents:
此方法停止将事件传递到指定的目标对象。
在target参数中指定有效对象,此方法将停止向与该对象关联的所有操作方法传递指定的事件。
为目标参数指定零,此方法防止将这些事件传递给所有目标对象的所有操作方法
objective - c:
[_myButton removeTarget: //any validObject (or) nil action:nil forControlEvents:UIControlEventAllEvents];
迅速:
myButton.removeTarget(*validObject or nil*, action:nil, forControlEvents:UIControlEvents.AllEvents)
For more details https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents:
斯威夫特2:
actionButton.removeTarget(nil, action: nil, forControlEvents: .AllEvents)
Swift 3 &4:
actionButton.removeTarget(nil, action: nil, for: .allEvents)
[actionButton removeTarget: nil action: NULL forControlEvents: UIControlEventAllEvents];
你可以改变选择器,如果它是有条件的。 参见下面的示例
您可以先删除所有目标,然后选择选择器并添加它。
rateButton。removeTarget(nil,动作:nil, for: .allEvents)
let action = interview.isRated ? #selector(viewTapped(_:)) : #selector(rateTapped(_:)) rateButton.addTarget(self, action: action, for: .touchUpInside)