2009-12-31 11 views
1

sous-vue voici mon productscontroller.hself.navigationController est nul après avoir ajouté

ProductListViewController *productListViewController; 
ProductGridViewController *productGridViewController; 
UIButton *flipIndicatorButton; 

et j'ajoute la liste et gridview en tant que sous-vue comme celui-ci dans ma mise en œuvre

ProductListViewController *listController = [[ProductListViewController alloc] initWithNibName:@"ProductListView" bundle:nil]; 
self.productListViewController = listController; 
self.productListViewController.CurrentSale = CurrentSale; 
[self.view insertSubview:listController.view atIndex:0]; 

mais quand je essayé de pousser contrôleur de détail de ProductListViewController.m comme ça

ProductDetailViewController *productDetailViewController = [[ProductDetailViewController alloc] init]; 

productDetailViewController.productIndexPath = indexPath; 

[self.navigationController pushViewController:productDetailViewController animated:YES]; 

juste faire s ne fonctionne pas, alors je vérifie [self.navigationController], il était nul, maintenant comment faire face à ce problème. Je suis prêt à donner plus de code et de détails pour le rendre plus clair. merci

+0

Si vous utilisez un contrôleur de navigation, pourquoi insérez-vous une sous-vue au lieu de pousser les vues vers le contrôleur? également, le contrôleur de navigation est-il nul avant d'insérer également la sous-vue? –

+0

merci Oren, pas ce n'est pas non, laissez-moi dire comment ma structure de l'application. TabBarController -NavigationControler --TableViewController --- ProductController (self.navigationControll n'est pas null ici) ---- ListViewController (self.navigationControll est nul) ---- GridViewControler (self.navigationControll est nul) Je pense que cela rendra l'image plus claire. – Nnp

+0

et j'ajoute le bouton d'affichage de flip comme article de bouton droit, qui est ajouté. et je peux renverser la vue, mais je ne peux pas pousser un autre contrôle de vue. – Nnp

Répondre

0

J'ai trouvé une solution de contournement pour ce problème. maintenant ce que je fais est que je passe ref de contrôleur parent dans ce cas ProductsController et méthode écrite pour pousser la vue suivante. suite à cela maintenant j'appelle la méthode parent pour pousser la vue suivante comme ceci [parent pushNextview]; jusqu'ici cela fonctionne bien, j'espère que c'est une bonne façon de faire ce que je voulais.

2

Où créez-vous le contrôleur de navigation? À un certain moment (probablement dans votre délégué App) vous devez avoir quelque chose comme ceci:

ProductsController *productsController = // create ProductsController 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:productsController]; 

Et puis ajoutez le point de vue de la NavController en tant que sous-vue à la fenêtre.

L'autre chose est que vous semblez utiliser trop de contrôleurs de vue pour un écran. Apple recommande un seul par écran.

+0

merci bpapa, j'utilise seulement un contrôleur par écran, c'est juste que je ne peux pas faire la hiérarchie de vue ici. J'ai tabbar, et j'ai fait d'abord tabbar comme Navigation dans mon Mainwindow.xib, et je crée ProductController dans le contrôleur de BrandList qui est mon premier écran, pas délégué d'APP. Est-ce clair? Ne me laissez pas savoir comment je peux le rendre plus clair. – Nnp

+0

je suis cet exemple pour créer des sous-vues (j'ai fait la même chose avec un changement mineur) http://developer.apple.com/iphone/library/samplecode/TheElements/index.html, espérons que cela aide – Nnp

0

Je suis tombé sur un problème similaire hier:

Tab Bar View - Table View - View

Dans le contrôleur de vue de la table, je voulais pousser le contrôleur « vue détaillée », mais [self navigationController] était nil ici. La solution était d'aller à cet arrangement:

Tab Bar View - Navigation View - Table View - View

Avec le contrôleur de navigation supplémentaire, [self navigationController] maintenant travaillé dans le contrôleur de vue de la table.

0

Je viens de découvrir pourquoi le navigationController est toujours nul. Toute votre série de vues doit être contenue dans un UINavigationController. Cela signifie que la première vue de votre hiérarchie devra être votre rootViewController. Le code bpapas devrait fonctionner.

1

J'ai eu le même problème récemment! J'ai "poped" ([self.navigationController popViewControllerAnimated: YES]) le viewController dans la méthode viewWillAppear: du viewcontroller. Donc, je viens de supprimer ce code et inséré le même code dans la méthode viewDidAppear: et cela a fonctionné!