Lucas Pereira
Lucas Pereira

Reputation: 569

The correct way of adding a UINavigationController to a existing UIViewController

I'm trying to add a UINavigationController to my existing view controller by adding this in ViewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];

    navController = [[UINavigationController alloc]init];

    [self.view addSubview:navController.view];
}

But by doing it this way, it completely blocks my view. It puts a UINavigationBar on the top but the rest of the view doesn't respond to input.

This is how I am presenting the view. The SecondViewController is the one I want to have a NavController:

UITabBarController *tabController = [[UITabBarController alloc] init];

FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"CardsViewController" bundle:nil];

UITabBarItem *tab1 = [[UITabBarItem alloc] initWithTitle:@"First" 
                                                   image:[UIImage imageNamed:@"img1.png"] tag:1];
[viewController1 setTabBarItem:tab1];    

SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"ShoppingViewController" bundle:nil];

UINavigationController *SecondViewNavCont = [[UINavigationController alloc]initWithRootViewController:viewController2];

UITabBarItem *tab2 = [[UITabBarItem alloc] initWithTitle:@"Second" 
                                                   image:[UIImage imageNamed:@"img2.png"] tag:2];
[SecondViewNavCont setTabBarItem:tab2];

UIViewController *viewController3 = [[UIViewController alloc] init];
UITabBarItem *tab3 = [[UITabBarItem alloc] initWithTitle:@"Third" 
                                                   image:[UIImage imageNamed:@"img3.png"] tag:3];
[viewController3 setTabBarItem:tab3];


tabController.viewControllers = [NSArray arrayWithObjects:viewController1, 
                                 viewController2, 
                                 viewController3, 
                                 nil];

[self.view addSubview:tabController.view];

Upvotes: 0

Views: 7541

Answers (4)

Omar Abdelhafith
Omar Abdelhafith

Reputation: 21221

You cannot add it to the current view controller What you need to do is instead of presenting the ViewController is to add this viewcontroller to the navigationview controller and present that

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:YourPresentedViewController];
//then present the navController
[self presentModalViewController:navController animated:YES];

Now when you present it do the following

NSArray arrayWithObjects:viewController1, 
                                 SecondViewNavCont, 
                                 viewController3, 
                                 nil];

Upvotes: 3

Dinesh
Dinesh

Reputation: 6532

You can try this code for load uiviewcontroller to uinavigationcontroller:

    yourviewController *viewcontroller=[[yourviewController alloc] initWithNibName:@"yourviewController" bundle:nil];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewcontroller];
    [self presentModalViewController:navController animated:YES];

(or) you want to load uinavigationcontroller in application startup try below code in your application delegate class:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
   UINavigationController *navController = [[UINavigationController alloc]  initWithRootViewController:viewcontroller.view];
   [self.window addSubview:navController.view];
   [self.window makeKeyAndVisible];
   return YES;
}

Welcome!

Upvotes: 2

Sumanth
Sumanth

Reputation: 4921

You need to add a view for that Navigation Controller. The added Navigation Controller has no view so it was overlaying on the UIViewController You need to add

 [[UINavigationController alloc] initWithNibName:@"ViewControllerName" bundle:nil];

Upvotes: 1

san
san

Reputation: 3328

You need to set the RootViewController for the navController object. Then further you can push UIViewcontroller objects using pushViewController method.

Upvotes: 1

Related Questions