0
votes

I have made a NavigationController structure. FirstViewController is RootViewController, SecondViewController is a next SubViewController. Each ViewController shouldAutorotateToInterfaceOrientation is a different(refer a following code). FirstViewController is only portrait available. SecondViewController all support Portrait and landscapeMode.

In FirstViewController after sth button touch, call a pushHandler. next SecondViewController is a pushed. In SecondViewController after rotated landscape back to the FirstViewController, that orientation is too landscape.

but, I implemented each ViewController orientation different. however each ViewController not independently set orientation. why happen?

How can I viewcontroller each orientation can be set independently, to do?

If SecondViewController change the orientation of the landscapeMode. I want back to the FirstViewController still portraitMode(forever hold portraitState Anything not to be affected). How do I implements programmatically?

FirstViewController *rootViewController = [FirstViewController alloc] init];

UINavigationController *MyNavigationController = [UINavigationController alloc] initWithRootViewController:rootViewController]];

//FirstViewController

- (void)pushHandler
{
    SecondViewController *subViewController = [SecondViewController alloc] init];

    [[self navigationController] pushViewController:subViewController animated:YES];
    [subViewController release];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{    
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

//SecondViewController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{    
    return YES;
}
1

1 Answers

0
votes

Because you use a UINavigationController for all your UIViewControllers whatever orientation behaviour you will set for the UINavigationController will be applied to all it's children or in otherwords objects on its stack.

Think of a UINavigationController as a house and UIViewControllers as rooms. All the rooms in the house will rotate in the same way the house. There is no way to turn a room without turning the house and other rooms.

But as always there are tricks. Look at my answer to this question Only having one view autorotate in xcode?