J'ai ajouté un contrôleur d'affichage (VC2) avec quelques éléments de forme simples à mon storyboard et faisant une SEGUE CTRL-Faire glisser à partir d'une tableViewController existante (VC1) qui est déclenchée par un bouton de balayage de fin
Je peux voir la sortie De la fonction d'impression (dans le code VC2 ci-dessous) dans le débogueur, mais mes éléments de formulaire ne sont pas visibles. Et pour une raison quelconque, je devais régler manuellement la couleur d'arrière-plan, qui avait fait défaut au noir, pas ce qui était défini sur Storyboard. Je pense que cela est lié à la façon dont je lime VC2, mais mes tentatives de modification du code à un spectacle normalwithIdentifier ont causé un P>
'nsinvalidargumentexception', raison: "Récepteur () n'a pas de Segue avec Identifiant P> blockQuote>
Puis j'ai supprimé et refuser la Segue sans effet. J'ai donc changé le code à cela, ce qui fonctionne, mais ne rend pas les éléments de scénario. P>
xxx pré> voici le code VC2 p>
xxx Pré> Comment puis-je corriger mon code de sorte que la disposition de la scénario, etc. est chargée et je peux voir les éléments de formulaire dans l'application? p>
Est-ce le mauvais moyen d'aller à un autre contrôleur d'affichage? Je demande parce que cela ressemble à des questions pour que ce sujet suggère que cela n'appelle pas correctement le scénario. Je cherche un exemple Swift 5 de la façon de faire cela et de ne trouver que des références à InstantiateAviewControllerWithIdentifier ("ViewController") qui ne semble pas être dans Swift 5 P>
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let vc = ShippingUnitsTableViewController() vc.ShipListID = ShipLists[indexPath.row].ListID vc.ProjectID = ProjectID navigationController?.pushViewController(vc, animated: true) }
3 Réponses :
Pouvez-vous essayer au lieu de la place, des méthodes de délégation de la TableView ou d'afficher le spectacle de contrôleurwithIdentifier? P> P>
Pas vraiment sûr de ce que vous suggérez. Si je change de navigationController? .PUSHVIEWCONTROLLER (VC, Animated: true) TO ECRESSEGUEGUEGUEGE (SENDIENTINATIF: "ReportFormvc", Sender: auto) Je reçois une erreur d'erreur - Termination de l'application en raison de l'exception non capturée 'NsinvalidargumentException ", raison:" Récepteur (
Supprimer votre option ClickView Func, utilisez DidSelectrow Méthode de TableView ou vous pouvez utiliser le même objectif Les contrôleurs ont des contrôleurs performants. Crasht, car vous n'avez défini aucun identifiant pour votre ViewController, vous devez vous rendre à Storyboard ReportFormvc, puis sélectionnez pour afficher l'inspecteur des attributs à partir du panneau de droite de Xcode, spécifiez l'identifiant de Segue. développeur.apple.com/documentation/uikit/uiviewcontroller/...
Segue a déjà un identifiant correct défini dans l'inspecteur des attributs.
OK La solution à ce problème est nécessaire à la modification de la manière dont j'ai déplacé entre les contrôleurs d'affichage. La méthode DidSelectrowat IndexPath ci-dessous n'utilise pas le storyboard, ce qui entraîne la sorte que le contrôleur de vue de destination soit en quelque sorte orphelin et ignorant les seggues de scénario.
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.ListID = ShipLists[indexPath.row].ListID
performSegue(withIdentifier: "UnitsVC", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "UnitsVC"{
let nextViewController = segue.destination as? ShippingUnitsTableViewController
nextViewController!.ProjectID = self.ProjectID
nextViewController!.ShipListID = self.ListID
}
}
Vous devez spécifier le storyboard dans lequel se trouve la vue Concontroller, puis instanciez la visualisation de cette scénario. Remplacez votre FUNC avec le bouton ci-dessous: -
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "ShippingUnitsTableViewController") as! ShippingUnitsTableViewController
vc.ShipListID = ShipLists[indexPath.row].ListID
vc.ProjectID = ProjectID
navigationController?.pushViewController(vc, animated: true)
}
Merci. La réponse que j'ai postée à l'aide de SEGUU fonctionne également. Votre solution est-elle la meilleure approche? Si oui, je vais marquer votre réponse comme correct
Je viens de dire une approche différente pour la même chose, si vous ne voulez pas déclarer Func "Préparer", vous pouvez utiliser cette méthode. Enfin, utilisez ce qui vous convient le mieux.
Testé cela, fonctionne bien. Merci encore pour avoir fourni cette approche alternative
@Mikikevolmar voudriez-vous aussi upérer la réponse
Je l'ai avancé il y a quelques jours. Je vais le marquer comme la bonne réponse aussi
Cette ligne est fausse:
let vc = composantviewController () code> voir programmingos.net/dont-make-a-new-instance-by-mistake-2