web-dev-qa-db-fra.com

Impossible de faire glisser l'action d'un bouton vers une fonction existante dans Xcode 8

J'ai un problème étrange avec Xcode 8. Lorsque j'essaie de faire glisser le bouton de la souris vers une fonction existante, je ne peux pas uniquement créer un nouveau point de vente ou une nouvelle action. Quoi de plus étrange, que même lorsque je crée une action par Ctrl + Drag, je ne peux pas connecter un événement au même bouton que celui que j'ai utilisé pour créer une action. L'icône IB est également vide, car il n'y a pas de lien entre l'action et le bouton, mais un clic en temps réel exécute l'action . Par contre, lorsque j'essaie de connecter l'action au bouton de Swift au storyboard, je peux "), mais j'obtiens une exception lorsque je clique en temps réel sur le sélecteur non reconnu myActionWithSender  enter image description here  enter image description here

19
Jarosław Krajewski

Dans ma version Xcode, IBAction est créé automatiquement avec le paramètre "Any" au lieu de "AnyObject". La création explicite d'IBAction avec UIButton a plutôt fonctionné pour moi.

22
Umut Uygar

Dans mon cas, vous devrez remplacer Any par UIButton. Il faut préciser que l'action provient d'UIButton.

@IBAction func buttonClicked(_ sender: UIButton) {

}
11
Didats Triadi

Cliquez sur le bouton UIButton, puis allez à "Inspecteur de connexions" dans la zone Utilitaires.

Cliquez sur le cercle vide à côté de l'événement et faites glisser la ligne dans func body.

2
Alaa Qaddoumi

faites un clic droit avec la fonction du bouton ouvert dans la retouche de sélection à l'intérieur pour faire glisser .. vous devriez essayer ceci ..

1
ronak patel

Dans votre changement de fichier .Swift:

@IBAction func buttonClicked(sender: UIButton) { // Do something }

à

@IBAction func buttonClicked(z sender: UIButton) { // Do something }

Ajoutez simplement ce petit "z" (ou l'étiquette que vous voulez vraiment). J'ai essayé un trait de soulignement '_', et cela fonctionne aussi, mais il donne un avertissement, alors j'ai simplement utilisé un 'z' pour contourner cet avertissement.

Je pense que c'est un bogue dans Xcode 8. Quelque part (probablement IB), il s'attend à un code conforme à Swift 3 où le premier paramètre DOIT avoir une étiquette. Ainsi, lorsqu'il voit le mot "expéditeur", il suppose (à tort) que c'est l'étiquette. Donc, ajouter une étiquette ('z' dans mon cas) rend tout le monde heureux.

Swift 2.3 ne nécessite pas d'étiquette. Swift 3 fait. Comme l'a souligné Jaroslaw, la mise à niveau de la version 2.3 à la version 3.0 contournera également ce problème. Mais si votre projet est bloqué sur la 2.3, le simple ajout d'un label semble faire l'affaire.

0
briggsm

Même dans Swift 3, vous souhaitez changer l'argument de @IBAction de (_ sender: Any) à (_ sender: UIButton) ou (_ sender: AnyObject), mais manuellement.

Cela peut fonctionner.

0
Lin

Changer l'expéditeur de Any à AnyObject fonctionne pour moi

0
Thanh Luu

Dans mon cas, un story-board similaire était ouvert. Une fois que je l'ai fermé, puis - j'ai cliqué une fois sur le bouton pour voir les blocs autour de lui pour l'alignement .- Ensuite, cliquez avec le bouton droit de la souris et glissez-le dans ViewController .- Pour finir, cliquez/tapez sur l'endroit où vous voulez placez le bloc de code de l'événement dans ViewController.

0
Hem