web-dev-qa-db-fra.com

Xcode8 ne peut pas connecter plusieurs boutons simples/uniques à un seul @IBAction dans un fichier Swift

J'utilise Xcode 8 beta. Je ne peux pas faire glisser plusieurs boutons UIB du storyboard pour me connecter à un seul fichier @IBAction dans le fichier Swift. Punaise? Merci de votre aide.

14
Anthony D.

En utilisant cette solution de contournement, vous pouvez ajouter une action existante et également connecter plusieurs boutons à une seule action.

Je pense qu'il y a un bug dans Xcode8. Vous pouvez ajouter plusieurs boutons/un seul bouton à une action/fonction unique en modifiant sender en _ sender.

exemple: - Bouton Normal

   @IBAction func huu(sender: UIButton) {

   }

Vous ne pouvez pas ajouter plusieurs boutons ou un seul bouton à cette action. Vous devez simplement changer comme ceci. Vous pouvez ensuite ajouter plusieurs boutons en faisant glisser et en vous connectant à partir du scénario.

 @IBAction func huu(_ sender: UIButton) {

 }

Après avoir connecté IBOutlets, Xcode affiche un avertissement comme celui-ci: -

 enter image description here

Pour supprimer cet avertissement, supprimez simplement le signe _ de l'action/fonction. Assurez-vous de supprimer _ après avoir connecté votre IBOutlets

J'espère que ça va vous aider! :)

18
Chathuranga Silva

Si vous modifiez l'expéditeur en AnyObject par opposition à Any ou UIButton , cela vous permettra de connecter plusieurs boutons à la même action.

13
Sean

Lorsque vous connectez une action de bouton, la méthode par défaut sera la suivante:

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

Il suffit de changer Any en UIButton et vous pourrez connecter plusieurs actions de bouton à cette méthode particulière.

Donc, après avoir changé cela devrait ressembler à ceci:

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

J'espère que cela résoudra le problème. :)

10
kunjus

Si vous changez "Any" en "UIButton", cela fonctionnera.

4
assangar

IBAction ci-dessous ne fonctionnera que pour un seul bouton.

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

Ci-dessous, IBAction fonctionnera avec plusieurs boutons.

@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

Si je ne me trompe pas, vous devez utiliser UIGestureRecognizer pour associer plusieurs éléments à une action.

Ce que vous pouvez faire est de placer une UIGestureRecognizer sur chaque bouton, puis de configurer l'un d'entre eux comme vous le feriez normalement avec un bouton (ctrl-glisser), puis de faire glisser tout en maintenant la touche Ctrl enfoncée à partir de l'autre outil de reconnaissance des gestes jusqu'à la première action que vous avez effectuée.

1
Caleb Kleveter

Je suppose que c'est un autre problème: si vous essayez de créer un IBAction la première fois, cela fonctionne bien. Mais si, pour une raison quelconque, vous décidez de reconnecter IBAction (même action à un autre objet ou de renommer la fonction), cela échoue.

En fait, vous créez une action IBAction appelée doSomething, qui crée une fonction func doSomething(sender: UIButton). Mais avec XCode 8 (ou Swift 2.3/3.0), cette méthode est interprétée comme func doSomethingWithSender(sender: UIButton).

Je suppose que c'est un bug, Apple est allé un peu trop fort sur la chose "renommer les méthodes Objc".

0
Frédéric Adda

J'ai changé l'expéditeur en UIButton de Any

Faites glisser le bouton vers le nom de la fonction.

0
Anil Singh

J'ai essayé plusieurs fois, enfin, j'ai eu le résultat comme,

UIAction normale

@IBAction func selectBtn(_ sender: Any) {

   }

pour plusieurs boutons avec la même méthode UIAction, essayez la méthode ci-dessous,

@IBAction func selectBtn(_ sender: UIButton) {

   }

Cela a fonctionné pour moi. J'ai changé le type de retour de "Any" à "UIButton"

0
suneel gunupudi

Dans Swift 3 version complète cela fonctionnera.

Il suffit de changer Any en UIButton et vous pouvez connecter plusieurs actions de bouton à cette méthode particulière.

Donc, après avoir changé cela devrait ressembler à ceci:

@IBAction func s (_ sender: UIButton) {} Cela résoudra le problème. :)

0
Mayur Bansal