J'utilise une cellule de TableView personnalisée, qui a un bouton et des étiquettes dans VC1. Ce que je veux faire, c'est quand je clique sur le bouton dans une rangée, puis ouvrez VC2 et envoyez le texte de l'étiquette actuelle (noms [i]) à VC2.
Mais dans mon cas, je suis resté sur la touche Buttontag dans Pressbutton FUNC Pour préparer Func Eh bien, je cherche beaucoup mais je n'ai pas eu de solution, puis-je combiner préparer () dans mon presse (), dans un autre mot, est la préparation est nécessaire lors de l'utilisation de la SEGUE? p> Controller.playingsong = Noms [Butontag] Code>. J'essaie d'utiliser un Var global, puis de préparer () pour récupérer ce Var, mais il n'a pas fonctionné de propriété, il semble que la préparation () sera exécutée avant la méthode Pressbutton (). P>
3 Réponses :
On dirait que vous attachez une SEGUE à votre bouton. Vous pouvez le faire ou utiliser un bouton Ibaction. Je ne pense pas que cela fonctionne correctement si vous faites les deux, ce qui peut être le problème que vous rencontrez.
Si vous avez votre bouton, appuyez sur la touche d'ibaction, vous pouvez récupérer la balise du bouton du paramètre Sender à l'action et Demandez ensuite à votre code d'ibaction instancier le contrôleur d'affichage et définissez une propriété du contrôleur de vue sur la balise de l'expéditeur avant de l'afficher. p>
Si vous souhaitez joindre une SEGUE au bouton, alors le J'ai corrigé le code ci-dessus en modifiant les deux couts dans le Notez que vous devez éviter la coulée de force ( Préparez-vous ( Pour: Sender :) Code> La méthode sera passée dans le paramètre Sender. Vous pouvez ensuite essayer de lancer l'expéditeur à `uibutton, et si la distribution réussit, récupérez la balise du bouton et transmettez-la sur le contrôleur de visualisation. Quelque chose comme ceci: p>
EDIT: H2>
si laisse code > Liaison optionnelle à utiliser
comme? Code>. p>
comme! code>) car il provoque un crash si elle échoue. p> p>
Merci pour votre réponse, essayez d'utiliser votre code, mais Xcode vous invite à moi que 'tout?' n'est pas convertible à 'uibutton'; Voulez-vous vouloir utiliser 'comme!' Pour forcer la baisse baisse? code> pour
Sender code> et
contrôleur code>. Et si j'utilise
! Code> pour forcer-jeter, alors il vous invite que
initialisateur pour la liaison conditionnelle doit avoir un type facultatif, pas "ouvertvc" code>
En tant que débutant Swift Developer, vous devriez prétendre que l'opérateur comme! Code> Force Cast Operate n'existe pas (pare-t-il pour la Force Detwrappe
! Code> opérateur.) Pensez à
! code> comme l'opérateur "Crash SI Nil". (et
comme! code> Le "Crash Si la distribution échoue".) Je modifierai ma réponse à utiliser
comme? code>, ce que vous voulez. (J'ai oublié cette partie.)
Tout d'abord, cela est fonctionné maintenant, merci. Et vous êtes 2nd personne à me demander de ne pas utiliser ! Code>, oui, c'est correct, je suis un junior pour Swift, parfois im juste paresseux d'utiliser une suggestion Xcode pour corriger mon code ou refuser d'utiliser
?? Par défaut code> parce que c'est plus de dactylographie ...
Si ma réponse a résolu votre problème, vous devez l'accepter. (Ce qui est attendu Comportement sur ce site. Les bonnes réponses de vote sont facultatives, mais elles sont connectées. Vous devez obtenir un peu plus de réputation pour cela.)
Comprenez que la paresse dans la programmation est beaucoup comme la paresse dans le câblage électrique. Cela pourrait vous épargner quelques minutes dans le présent et causer votre maison (app) de brûler à un moment donné.
Je suis vraiment occupé hier. Et les gars des gars répondent à ma question, mais vous êtes le 1er à répondre, alors je vais accepter votre réponse. Ensuite, je changerai la cellule de ma application en tant que cellule personnalisée car elle fonctionne dans ce petit test.
vous n'avez pas nécessairement besoin de remplacer la fonction de préparation. strong> J'espère que ma réponse vous aide :) p> p>
Eh bien, votre code fonctionne bien lorsque je supprimais la SEGUE dans Storyboard ainsi que préparer () dans la VC1. Ce que je manque, cela pourrait être celui-ci auto.storyboard? .InstantiateViewController (withIdidInder: "Yourview StoryboardID") code>, je ne connais tout simplement pas cette méthode ...
Vous devez changer ici si "SEGUE est du bouton" STRY> override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch segue.identifier {
case "playingSongs":
let controller = segue.destination as! ViewController
controller.playingSong = names[(sender as! UIButton).tag] //Need Change here
default: break
}
}
génial! Cela fonctionne aussi, je suis un cerveau stupide ne pouvait pas utiliser l'expéditeur pour passer le bouton.tag :( réellement votre approche et Nouraiz Taimour peut être les 2 façons de mentionner dans la réponse de Duncan C.