self.navigationController is nil after adding subview

允我心安 提交于 2020-01-14 04:37:10

问题


here is my productscontroller.h

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

and i am adding list and gridview as a subview like this in my implementation

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

but in when i tried to push detailview controller from ProductListViewController.m like this

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

productDetailViewController.productIndexPath = indexPath;

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

it just does not work, then i check [self.navigationController] , it was nil, now how to deal with this problem. i am ready to give some more code and detail to make more clear. thanks


回答1:


Where are you creating the Navigation Controller? At some point (probably in your App Delegate) you have to have something like this:

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

And then add the navController's view as a subview to your window.

The other thing is that you appear to be using too many View Controllers for one screen. Apple recommends only one per screen.




回答2:


I had the same problem recently! I "poped" ([self.navigationController popViewControllerAnimated:YES]) the viewController in the viewWillAppear: method of the viewcontroller. So I just removed this code and inserted the same code in the viewDidAppear: method and it worked!




回答3:


i found workaround for this problem. now what i am doing is i am passing ref of parent controller in this case ProductsController and written method to push next view. following this now i am calling parent method to push next view like this [parent pushNextview]; so far it works fine, hope this is good way of doing what i wanted to.




回答4:


I ran into a similar issue yesterday:

Tab Bar View - Table View - View

In the table view controller, I wanted to push the "detail view" controller, but [self navigationController] was nil here. The solution was to go to this arrangement:

Tab Bar View - Navigation View - Table View - View

With the additional navigation controller, [self navigationController] now worked in the table view controller.




回答5:


I just found out why the navigationController is always nil. Your whole series of views should be contained in a UINavigationController. This means that the first view in your hierarchy will have to be your rootViewController. bpapas code should work.



来源:https://stackoverflow.com/questions/1983620/self-navigationcontroller-is-nil-after-adding-subview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!