Ganesh
Ganesh

Reputation: 101

ContainerView childViewControlllers view frame taking whole screen

Please see the following attached image for more understanding.

viewControllers

The scenario is : I have five view controllers

Each view navigate to next viewController on push

Now the MidContainerViewController has got the Container which embeds the FirstViewController.

Bottom of MidContainerViewController is a static view which should not change while navigating further.

On navigation The FirstViewController should be of size equal to container

Also when I navigate to SecondViewController from FirstViewController, it should also be of size of Container.

Objective 1 : 'FirstViewController' and 'SecondViewController' should not take whole screen overlapping the bottomView image on MidContainerViewController.

Objective 2 : I must pop to root "View Controller" on last 'push' on SecondViewController.

Solutions :

1) Currently As I have embedding the root "View Controller" to navigationController. No problem with objective 2. It successfully navigates back to root. But can't achieve objective 1

2) If I embed the "First View Controller" too with navigationController the objective 1 is achieved but start facing problem for objective 2. It pop back till 'MidContainerViewController' only.

Any suggestion are highly appreciated.

Thanks,

Upvotes: 2

Views: 1188

Answers (3)

Ganesh
Ganesh

Reputation: 101

Thank you everyone. The problem is solved and both the objectives are achieved.

I kept only one navigation controller as root view controller.

I created one customContainerViewController. This class has instances of all the children it is supposed to show. This class acts as delegate for each of its childViewController. Make customContainerViewController as deleagte of each childViewController.

I updated the chilren using delegation method and using UIView transition method in UIKit.

This worked for me.

Upvotes: 0

Salman Zaidi
Salman Zaidi

Reputation: 9842

Assuming your are manually handling push/pop events without using storyboard, I recommend you to not push the FirstViewController from MidContainerViewController. Add the next view controller as child view controller through following code:

FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:[NSBundle mainBundle]];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstViewController];

[self addChildViewController:navController];
[navController.view setFrame:CGRectMake(0.0f, 0.0f, _containerView.frame.size.width, _containerView.frame.size.height)];
[_containerView addSubview:navController.view];
[navController didMoveToParentViewController:self];

From the above code you'll achieve your first objective. In the above code, the FirstViewController gets initiated on its own separate navigation controller object, so it will have different navigation stack. So if you further push and pop from FirstViewController & SecondViewController, your view will not take the whole screen. But if you call popToRootViewController from last view controller, your root view controller would be FirstViewController in that specific container view.

To achieve second objective, you'll have to create a public property to contain reference of main navigation controller object in your AppDelegate class. Create your root view controller from that navigation controller object. In your last view controller, you'll then have to get reference of that navigation controller property from your AppDelagate class and then call popToRootViewController from that object.

Upvotes: 1

Avineet Gupta
Avineet Gupta

Reputation: 596

i think you must present your root view controller from the secondView Controller rather that embedding to root view controller.

Upvotes: 0

Related Questions