2017-09-23 1 views
0

Je tente de présenter un tableViewController intégré dans un NavigationController sur un ViewController intégré dans un NavigationController.Tentative de présentation du contrôleur de navigation sur le contrôleur de navigation "dont la vue ne se trouve pas dans la hiérarchie des fenêtres"

I keep getting the error: that the view controller cannot be presented because it is not in the window hierarchy.

En bref, je suis en train de permettre à un utilisateur de cliquer sur the number of likes sur un poste et ensuite dirigé vers un TableViewController embarqué dans NavigationController et il ne fonctionne pas.

Pour une raison quelconque, cela fonctionne quand on me présente à partir d'un contrôleur de barre d'onglets quand j'essaie de cliquer sur le même nombre mais pas quand je le fais depuis un contrôleur de navigation. Le code de l'action de cliquer sur le même nombre est la suivante et se trouve dans un fichier rapide des cellules vue de collection:

@IBAction func LikeNumber_tapped(_ sender: Any) { 
     let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LikedByVC2") as? UINavigationController 
     let tableVC = vc?.viewControllers.first as! LikedByTableViewController 
     tableVC.postKey = self.postKey 
     self.window?.rootViewController?.present(vc!, animated: true, completion: nil) 

    } 

Est-il possible de faire ce que je tente? J'ai essayé de rendre la question aussi simple que possible mais faites-moi savoir si je dois en dire plus. Merci d'avance.

+0

Pourquoi fais-tu ça? Pourquoi pas 'self.navigationController? .pushViewController (vc, animé: false)'? ou pourquoi ne pas simplement utiliser un segue? – Paulw11

+0

@ Paulw11 Je ne peux pas utiliser push parce que "self" est une collectionviewcell donc je suis limité aux options que j'ai pour montrer un autre contrôleur de vue. Et je ne sais pas comment une section pourrait m'aider à montrer le contrôleur de vue. – dombad

+0

Ok, si 'self' est une cellule, alors vous devriez utiliser une délégation et le bouton tapera l'événement sur le contrôleur de vue correct afin qu'il puisse être traité. Approche de base [ici] (https://stackoverflow.com/questions/28659845/swift-how-to-get-the-indexpath-row-when-a-button-in-a-cell-is-tapped/38941510# 38941510). Et montrer les contrôleurs de vue est ce que font les télégrammes. – Paulw11

Répondre

0

Une solution pourrait être de remplacer la dernière ligne avec ceci:

UIApplication.shared.keyWindow?.rootViewController?.present(vc!, animated: true, completion: nil) 

Pour plus d'informations et différentes solutions que vous pouvez également vérifier thread

+0

Je reçois toujours la même erreur. Il dit ce qui suit: "Attention: Tenter de présenter sur dont la vue ne se trouve pas dans la hiérarchie des fenêtres!" Cela doit avoir quelque chose à voir avec le fait qu'il passe d'un contrôleur de tabulation à un contrôleur de navigation, et ce que j'essaie de présenter devrait passer par-dessus ce contrôleur de navigation, mais il essaie de se présenter sur le contrôleur de tabulation. C'est le problème que je rencontre. – dombad