Call removeTarget:action:forControlEvents:, pass nil for the target, NULL for action, and use a control mask that sets all bits (UIControlEventAllEvents).
Objective-C
[someControl removeTarget:nil
action:NULL
forControlEvents:UIControlEventAllEvents];
Swift 2
button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)
Swift 3 or higher
button.removeTarget(nil, action: nil, for: .allEvents)
@progrmr's answer in Swift 2:
button.removeTarget(nil, action: nil, forControlEvents: .AllEvents)
and Swift 3:
button.removeTarget(nil, action: nil, for: .allEvents)
Note: Swift doesn't have NULL
, so I tested replacing it with nil
and it seems to work fine.
removeTarget(nil, action: nil, for: .allEvents)
nil
or NULL
to both the first and second arguments in Objective-C too, and it will work. I believe both are defined as (void*) 0
(or at the very least, evaluate as equals).
Swift 3, 4, 5:
btnCancel.removeTarget(nil, action: nil, forControlEvents: UIControlEvents.AllEvents)
Swift 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];
- removeTarget:action:forControlEvents:
This method stops the delivery of events to the specified target object.
Specifying a valid object in the target parameter, this method stops the delivery of the specified events to all action methods associated with that object. Specifying nil for the target parameter, this method prevents the delivery of those events to all action methods of all target objects objective-c: [_myButton removeTarget: //any validObject (or) nil action:nil forControlEvents:UIControlEventAllEvents]; swift: myButton.removeTarget(*validObject or nil*, action:nil, forControlEvents:UIControlEvents.AllEvents)
you can change the selector if it is conditional. see below example
you can remove all the targets first, then choose the selector and add it.
rateButton.removeTarget(nil, action: nil, for: .allEvents)
let action = interview.isRated ? #selector(viewTapped(_:)) : #selector(rateTapped(_:))
rateButton.addTarget(self, action: action, for: .touchUpInside)
Success story sharing