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


341

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

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

Ответы:


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)

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и он, кажется, работает нормально.


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 :

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.