0
votes

Comment passer le bouton Sender.tag à un autre VC en cliquant sur un bouton qui déclenche une autre VC

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 Controller.playingsong = Noms [Butontag] . 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 ().

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? xxx


0 commentaires

3 Réponses :


0
votes

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.

Si vous souhaitez joindre une SEGUE au bouton, alors le Préparez-vous ( Pour: Sender :) 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: xxx

EDIT:

J'ai corrigé le code ci-dessus en modifiant les deux couts dans le si laisse Liaison optionnelle à utiliser comme? .

Notez que vous devez éviter la coulée de force ( comme! ) car il provoque un crash si elle échoue.


6 commentaires

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? pour Sender et contrôleur . Et si j'utilise ! pour forcer-jeter, alors il vous invite que initialisateur pour la liaison conditionnelle doit avoir un type facultatif, pas "ouvertvc"


En tant que débutant Swift Developer, vous devriez prétendre que l'opérateur comme! Force Cast Operate n'existe pas (pare-t-il pour la Force Detwrappe ! opérateur.) Pensez à ! comme l'opérateur "Crash SI Nil". (et comme! Le "Crash Si la distribution échoue".) Je modifierai ma réponse à utiliser comme? , 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 ! , 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 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.



0
votes

vous n'avez pas nécessairement besoin de remplacer la fonction de préparation.

Écrivez simplement le code de votre fonction de préparation dans la fonction Pressebutton à la place mais avec un peu de modification comme suit: xxx

J'espère que ma réponse vous aide :)


1 commentaires

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") , je ne connais tout simplement pas cette méthode ...



0
votes

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
    }
}


1 commentaires

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.