comment accéder à segue dans des "didSelectRowAtIndexPath' - Swift/IOS
Je sais comment passer des données à l'aide de enchaîne à partir de prepareForSegue fonction, mais la chose que j'ai un TableViewCell à partir de laquelle il y a deux enchaîne à deux ViewControllers (disons A, B dès à présent). Il a été suggéré ici qu'il est préférable de connecter le enchaîne à Vue-contrôleur plutôt que de la tableCell lui-même, qui en effet a parfaitement fonctionné. Mais je veux transmettre des informations à la seconde Vue-contrôleur lorsque la cellule est cliqué, Alors comment accéder à segue que j'ai connecté à la Source ViewController.
Code:
À l'intérieur de prepareForSegue
if segue.identifier == "showQuestionnaire"{
if let indexPath = self.tableView.indexPathForSelectedRow() {
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! QuestionnaireController
let patientQuestionnaire = patientQuestionnaires[indexPath.row] as! PatientQuestionnaire
controller.selectedQuestionnaire = patientQuestionnaire
self.performSegueWithIdentifier("showQuestionnaire", sender: self)
}
}
De nouveau: Cette question n'est pas sur le plan de la transmission de l'information par le biais de prepareForSegue
si ([segue.destinationViewController isKindOfClass:[A_VC classe]]) {...} else {...}
De transmettre les informations dans
prepareForSegue
est la façon correcte de le faire. Vous certainement ne devrait pas être l'appel de performSegueWithIdentifier
à l'intérieur de prepareForSegue
.On dirait que vous êtes déjà la transmission de l'information à la prochaine vue-contrôleur avec le
let controller = segue.destination as...
ligne. Qu'est-ce qui sont que vous essayez de faire qui n'est pas fait dans cette fonction? Et comme mentionné ailleurs, n'appelez pas performSegueWithIdentifier
à l'intérieur de prepareForSegue
.Les gars, je vais essayer de mettre le contrôleur. selectedQuestionnaire lors de l'exécution de la séquence de didSelectRowAtIndexPath, mais à la fin, il effectue la séquence de mon contrôleur de destination, mais il n'est pas le réglage de la selectedQuestionnaire valeur à l'intérieur de ça, je pense que c'est parce que je ne peut pas accéder à la séquence qui est connecté à la source-vue-contrôleur pour créer un DestinationViewController COMME en prepareforSegue fonction. J'espère que je suis clair cette fois.
OriginalL'auteur Sashi | 2015-04-30
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en utilisant la
didSelectRowAtIndexPath
méthode pour déterminer si une cellule est sélectionnée.Puis dans votre
prepareForSegue
méthodeÀ expliquer...
performSegueWithIdentifier
au sein de la préparer pour enchaîner méthode, carperformSegueWithIdentifier
conduit àprepareForSegue
; Vous êtes juste une boucle autour et sans but. (Lorsque vous souhaitez effectuer une segue, prepareForSegue est toujours exécuté)prepareForSegue
ne fonctionne pas par lui-même, lorsqu'une ligne est sélectionnée. C'est là que vous avez besoindidSelectRowAtIndexPath
. Vous avez besoin d'unperformSegueWithIdentifier
en dehors de la méthode décrite précédemment, qui devrait être endidSelectRowAtIndexPath
let controller = (segue.destinationVIewController....
. ne peuvent pas chasser valeur de type 'UIViewController' (0x105866418) à " CarePortal.QuestionnaireController' (0x1034f1850).Vous êtes probablement un mauvais réglage de la type d'objet à la fonte, pourriez-vous vérifier et assurez-vous que tout ce que vous avez coulé, est ce que vous avez décrit?
Modification de ! ? a fait le tour. Merci @Nate. Swift est vraiment strict sur les valeurs optionnelles :@
Yup, il suffit de garder à l'esprit dans l'avenir, , l'appareil doit savoir que vous souhaitez effectuer une transition de sorte qu'il sait préparer 🙂
J'ai une question au sujet de cette solution. Si l'utilisateur double-cliquant sur la cellule (accidentellement), puis performSegue sera déclenchée deux fois. Comment faire en sorte qu'il ne déclenche une fois?
OriginalL'auteur Nate Lee