UIButton видалити всі цільові дії


341

Я додав декілька цільових дій дляControlEvents: до UIButton. Я хотів би видалити все це за один раз, нічого не розмовляючи. Тоді я буду встановлювати нові цілі.

Чи можливо це, і як мені це зробити?

Відповіді:


824

Виклик RemoveTarget: action: forControlEvents:, передайте нуль цілі, NULL для дії та використовуйте контрольну маску, яка встановлює всі біти (UIControlEventAllEvents).

Ціль-С

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

Швидкий 2

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

Швидкий 3

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

4
Дякую за пораду! Ось повне посилання, яке я думаю (тобто до розділу): " developer.apple.com/iphone/library/documentation/uikit/… :"
SK9,

1
пропозиція progrmr, звичайно, працює. Щоб додати тут відповідь, є фрагмент коду, як той, який мені потрібен: [кнопка RemoveTarget: nil action: NULL forControlEvents: UIControlEventTouchUpInside];
SK9

6
Убік: метод екземпляра -allTargets повертає NSSet всіх цілей примірника (нульовий, якщо його немає).
SK9

3
Ідеально! саме те, що я шукав: D
Totumus Maximus

1
Оновлено Swift 2 і 3, оскільки є конкуруючі відповіді з точно однаковою відповіддю, що відрізняються лише мовою.
Peter DeWeese

92

Відповідь @ progrmr у Swift 2:

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

і Swift 3:

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

Примітка: у Swift немає NULL, тому я перевірив його заміну, nilі, здається, він працює добре.


5
Для Swift 3: ".AllEvents" зараз ".allEvents" (з нижнього регістру "a"):removeTarget(nil, action: nil, for: .allEvents)
Сашо

Що стосується вашого ПРИМІТКИ: На самом деле, я вважаю , ви могли б передати або nilабо NULLдо обом першим і другим аргументів в Objective-C теж, і він буде працювати. Я вважаю, що обидва визначаються як (void*) 0(або, принаймні, оцінюються як рівні).
Nicolas Miari

@Sasho Я хотів би побачити деякі статистичні дані щодо того, наскільки зменшуються розміри вихідних файлів (в середньому) при переході до Swift 3 :-) (завдяки новим правилам методу / іменування аргументів).
Nicolas Miari

Оскільки це однакова відповідь на іншій мові, і мова не позначена в цьому питанні, це має бути редагуванням відповіді на @ progrmr.
Peter DeWeese

6

Швидкий:

btnCancel.removeTarget(self, action: Selector(), forControlEvents: UIControlEvents.AllEvents)

будь ласка, вкажіть, якою мовою ви займаєтесь
Хуан Боро

@ JuanPabloBoero, це стрімко
Ія

3

Швидкий 2:

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

Swift 3 і 4:

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

Завдання-C:

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

Сподіваюся, це допомагає.


2
- removeTarget:action:forControlEvents:

Цей спосіб зупиняє доставку подій до вказаного цільового об'єкта.

  1. Вказуючи дійсний об'єкт у цільовому параметрі, цей метод зупиняє доставку зазначених подій усім методам дій, пов'язаним з цим об'єктом.

  2. Зазначаючи нуль для цільового параметра, цей метод запобігає доставці цих подій для всіх методів дій усіх цільових об'єктів

    target-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.