0

J'accès à un contrôleur de navigation du délégué de l'application et essayer de pousser une autre vue:NavigationController pas pousser vue

[appDelegate.myNavigationController pushViewController:self.detailView animated:YES]; 

, mais rien ne se passe. Ce qui précède est dans myTableView.

L'application est basée sur des tabulations. J'ai ajouté un objet NavigationController sous l'objet TabbarController dans IB. Ensuite, j'ai créé une référence à myNavigationController dans le délégué de l'application.

Des suggestions comment je peux comprendre pourquoi le code ci-dessus ne fonctionne pas? Cela fonctionne si addSubview à la vue actuelle.

Répondre

1

Assurez-vous que appDelegate est non nulle (où que vous obtenez à partir de la valeur est de retour à droite), appDelegate.myNavigationController est non nulle (la configuration était IBOutlet correctement), et que appDelegate.myNavigationController.window n'est pas nul (il est affiché sur le haut de la pile.

Vérifiez également que les animations des précédentes pousser ou éclater de vues sont terminées avant de pousser votre nouvel élément.

+0

Merci. IBOutlet n'était pas connecté. – 4thSpace

+0

Dans la vue détaillée, je le fais dans viewWillAppear: appDelegate.myNavigationController.navigationItem.rightBarButtonItem = self.myButton mais aucun bouton n'apparaît. Je vois que les instances sont valides. Des idées de ce que je fais mal? – 4thSpace

+0

Vous devriez probablement poser une autre question pour cela. Cependant, de prime abord, l'élément de navigation s'applique au contrôleur de vue affiché dans le contrôleur de navigation, et non au contrôleur de navigation lui-même. Vous voulez appDelegate.myNavigationController.topViewController.navigationItem.rightBarButtonItem. Ou plus succinctement, vous voulez probablement juste self.navigationItem.rightBarButtonItem. –

0

Ce ne peut pas être une réponse à votre question.

Votre code semble confus. L'extrait est-il un?sous-classe ou d'une sous-classe UITableViewController? Ce qui me fait demander est que votre argument pour pushViewController: est self.detailView. Garder la distinction claire est extrêmement important.

Si le code est appelé à partir d'un contrôleur de vue qui affiche une barre de navigation, vous devez utiliser self.navigationController plutôt que d'ajouter une propriété à appDelegate.

En particulier, vous devez utiliser le contrôleur de navigation dans votre onglet.

L'un de ces éléments pourrait provoquer un problème si la vue n'apparaît pas.

+0

myTableView est un UIViewController. Comment le detailView accédera-t-il au contrôleur de navigation s'il est sur myTableview? detailView aurait besoin d'une référence à myTableView (le parent) non? Je préfère éviter cela parce que cela devient une référence circulaire. – 4thSpace

+0

Si detailView est un UIViewController que vous avez poussé (et il doit l'être, pour que votre fragment de code fonctionne), alors il a une propriété navigationController qui est définie lorsque vous le poussez. –

Questions connexes