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

这可能吗?我该怎么做?


当前回答

如果选择器是有条件的,则可以更改它。 请看下面的例子

您可以先删除所有目标,然后选择选择器并添加它。

rateButton。removeTarget(nil,动作:nil, for: .allEvents)

    let action = interview.isRated ? #selector(viewTapped(_:)) : #selector(rateTapped(_:))
            
    rateButton.addTarget(self, action: action, for: .touchUpInside)

其他回答

Swift 3,4,5:

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

@ program在Swift 2中的回答:

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

Swift 3:

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

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

调用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)

如果选择器是有条件的,则可以更改它。 请看下面的例子

您可以先删除所有目标,然后选择选择器并添加它。

rateButton。removeTarget(nil,动作:nil, for: .allEvents)

    let action = interview.isRated ? #selector(viewTapped(_:)) : #selector(rateTapped(_:))
            
    rateButton.addTarget(self, action: action, for: .touchUpInside)

斯威夫特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];