0
votes

Eléments de scénario non visibles dans View Controller après SEGUE

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)

}


1 commentaires

Cette ligne est fausse: let vc = composantviewController () voir programmingos.net/dont-make-a-new-instance-by-mistake-2


3 Réponses :


0
votes

Pouvez-vous essayer xxx

au lieu de la place, des méthodes de délégation de la TableView ou d'afficher le spectacle de contrôleurwithIdentifier?


3 commentaires

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 () n'a pas de Segue avec identifiant 'ReportFormvc' '


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.



0
votes

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


0 commentaires

2
votes

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


5 commentaires

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