UIButton删除所有的目标动作

我已经为一个UIButton添加了多个target-action-forControlEvents:。我想去除所有这些在一个去不脱销任何东西。然后我会设定新的目标。

这可能吗?我该怎么做?

89349 次浏览

调用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中的回答:

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

Swift 3:

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

注意:Swift没有NULL,所以我测试用nil替换它,它似乎工作得很好。

Swift 3,4,5:

btnCancel.removeTarget(nil, action: nil, forControlEvents: UIControlEvents.AllEvents)
- removeTarget:action:forControlEvents:

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

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

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

    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)

objective - c:

[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)