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.
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: -
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! :)
Si vous modifiez l'expéditeur en AnyObject par opposition à Any ou UIButton , cela vous permettra de connecter plusieurs boutons à la même action.
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. :)
Si vous changez "Any" en "UIButton", cela fonctionnera.
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
}
}
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.
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".
J'ai changé l'expéditeur en UIButton de Any
Faites glisser le bouton vers le nom de la fonction.
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"
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. :)