UIButton удалить все target-действия

341

Я добавил несколько target-action-forControlEvents: для кнопки UIB. Я хотел бы удалить все это за один раз, ничего не освобождая. Затем я установлю новые цели.

Возможно ли это и как мне это сделать?

SK9
источник

Ответы:

824

Вызовите removeTarget: action: forControlEvents:, передайте nil для цели, NULL для действия и используйте маску управления, которая устанавливает все биты (UIControlEventAllEvents).

Objective-C

[someControl removeTarget:nil 
                   action:NULL 
         forControlEvents:UIControlEventAllEvents];

Swift 2

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

Свифт 3

button.removeTarget(nil, action: nil, for: .allEvents)
progrmr
источник
4
Спасибо за чаевые! Вот полная ссылка, которую я думаю (т.
Е.
1
предложение прогрмр работает конечно. Чтобы добавить в ответ вот фрагмент кода, подобный тому, который мне был нужен: [button removeTarget: nil action: NULL forControlEvents: UIControlEventTouchUpInside];
SK9
6
Кроме того: метод экземпляра -allTargets возвращает NSSet всех целей экземпляра (ноль, если их нет).
SK9
3
Отлично! именно то, что я искал: D
Totumus Maximus
1
Обновлен со Swift 2 и 3, так как есть конкурирующие ответы с одинаковым ответом, различающиеся только языком.
Питер
92

Ответ @ progrmr в Swift 2:

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

и Свифт 3:

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

Примечание: Swift не имеет NULL, поэтому я протестировал замену его на nilи он, кажется, работает нормально.

Hlung
источник
5
Для Swift 3: «.AllEvents» теперь является «.allEvents» (со строчной буквой «a»):removeTarget(nil, action: nil, for: .allEvents)
Sasho
Что касается вашего ПРИМЕЧАНИЯ: На самом деле, я полагаю , вы могли бы передать либо nilили NULLк обеим первым и вторым аргументам в Objective-C тоже, и он будет работать. Я считаю, что оба определены как (void*) 0(или, по крайней мере, оценивать как равные).
Николас Миари
@Sasho Я бы хотел увидеть статистику о том, насколько уменьшаются размеры исходных файлов (в среднем) при обновлении до Swift 3 :-) (из-за новых правил именования методов / аргументов).
Николас Миари
Поскольку это один и тот же ответ на другом языке, и этот язык не помечен в этом вопросе, его следует изменить в ответе @ progrmr.
Питер
6

Swift:

btnCancel.removeTarget(self, action: Selector(), forControlEvents: UIControlEvents.AllEvents)
Ия
источник
пожалуйста, укажите, на каком языке вы говорите
Хуан Боэро
@ JuanPabloBoero, это быстро
Ия
3

Свифт 2:

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

Свифт 3 и 4:

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

Objective-C:

[actionButton removeTarget: nil action: NULL forControlEvents: UIControlEventAllEvents];

Надеюсь, поможет.

Риаджур Рахман
источник
2
- removeTarget:action:forControlEvents:

Этот метод останавливает доставку событий указанному целевому объекту.

  1. Указывая действительный объект в целевом параметре, этот метод останавливает доставку указанных событий всем методам действия, связанным с этим объектом.

  2. Указывая nil для целевого параметра, этот метод предотвращает доставку этих событий всем методам действия всех целевых объектов.

    Objective-C:

    [_myButton removeTarget:  //any validObject (or) nil
                  action:nil
        forControlEvents:UIControlEventAllEvents]; 

    скоро:

    myButton.removeTarget(*validObject or nil*, action:nil, forControlEvents:UIControlEvents.AllEvents)

Для получения дополнительной информации https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/index.html#//apple_ref/occ/instm/UIControl/removeTarget:action:forControlEvents :

UdayM
источник