it-roy-ru.com

Xcode8 не может подключить несколько Uibutton к одному @IBAction в файле Swift

Я использую Xcode 8 бета. Я не могу перетащить несколько кнопок UIB из раскадровки, чтобы подключиться к одному файлу @IBAction в Swift. Ошибка? Спасибо за вашу помощь.

14
Anthony D.

Используя этот обходной путь, вы можете добавить существующее действие, а также подключить несколько кнопок к одному действию.

Я думаю, что есть ошибка в Xcode8. Вы можете добавить несколько/одну кнопку к одному действию/функции, изменив sender на _ sender

например: - Обычная кнопка

   @IBAction func huu(sender: UIButton) {

   }

Вы не можете добавить несколько кнопок или одну кнопку к этому действию, вам нужно просто изменить это, а затем вы можете добавить несколько кнопок с помощью перетаскивания и подключения из раскадровки.

 @IBAction func huu(_ sender: UIButton) {

 }

После подключения IBOutlets Xcode отобразит следующее предупреждение:

 enter image description here

Чтобы удалить это предупреждение, просто удалите знак _ из действия/функции. Обязательно удалите _ после подключения вашего IBOutlets

Надеюсь, что это поможет вам! :)

18
Chathuranga Silva

Если вы измените отправителя на AnyObject в отличие от Any или UIButton , это позволит вам подключить несколько кнопок к одному действию.

13
Sean

Когда вы подключаете действие кнопки, по умолчанию метод будет выглядеть так:

@IBAction func s(_ sender: Any) {
    }

Просто измените Any на UIButton , и вы можете подключить больше действий кнопок к этому конкретному методу.

Так что после изменения это должно выглядеть так:

@IBAction func s(_ sender: UIButton) {
    }

Надеюсь, что это решит проблему. :)

10
kunjus

Если вы измените «Любой» на «UIButton», это будет работать. 

4
assangar

Ниже IBAction будет работать только для одной кнопки.

@IBAction func singleButton(sender: Any) {
   // Write your logic
}

Ниже IBAction будет работать с несколькими кнопками.

@IBAction func multipleButton(sender: UIButton) {
   // To find a particular button from an array of buttons
   if sender.tag == 1{
     // Write your logic
   }else if sender.tag == 2{
    // Write your logic
   }

}
1
suneel gunupudi

Если я прав, вам нужно использовать UIGestureRecognizer, чтобы прикрепить несколько вещей к одному действию. 

Что вы можете сделать, это поместить UIGestureRecognizer на каждую кнопку, а затем настроить одну из них, как обычно, с помощью кнопки (Ctrl-drag), а затем Ctrl-Drag от других распознавателей жестов до первого действия, которое вы сделали.

1
Caleb Kleveter

Я предполагаю, что это другая проблема: если вы пытаетесь создать IBAction в первый раз, он работает нормально . Но если по какой-либо причине вы решите повторно подключить IBAction (то же действие к другому объекту или переименовать функцию), тогда это терпит неудачу.

Фактически вы создаете IBAction с именем doSomething, который создает функцию func doSomething(sender: UIButton). Но в XCode 8 (или Swift 2.3/3.0) этот метод интерпретируется как func doSomethingWithSender(sender: UIButton).

Полагаю, это ошибка, Apple слишком усердно занималась «переименованием Objc-методов».

0
Frédéric Adda

Я изменил отправителя на UIButton с любого

Управление перетащите кнопку на название функции.

0
Anil Singh

Я пытался много раз, наконец, я получил результат, как,

Нормальный UIAction

@IBAction func selectBtn(_ sender: Any) {

   }

для нескольких кнопок с одним и тем же методом UIAction, попробуйте метод ниже,

@IBAction func selectBtn(_ sender: UIButton) {

   }

Это сработало для меня. Я изменил тип возврата с «Любой» на «UIButton»

0
suneel gunupudi

В полной версии Swift 3 это будет работать.

Просто измените Any на UIButton, и вы сможете подключить больше действий кнопок к этому конкретному методу.

Так что после изменения это должно выглядеть так:

@IBAction func s (_ sender: UIButton) { } Конечно, это решит проблему. :)

0
Mayur Bansal