0

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;
}
bitmapdata.com
  • 9,572
  • 5
  • 35
  • 43

1 Answers1

0

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?

Community
  • 1
  • 1
Cyprian
  • 9,423
  • 4
  • 39
  • 73
  • I've already tried a similar code was applied. My NavigationController structure very complex because have a TabBarController, navigationItem... you're code not change navigationItem and TabBarController orientation. and [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotate) name:UIDeviceOrientationDidChangeNotification object:nil]; this Notification is always respond only UIDeviceState. not related shouldAutorotateToInterface. return (interfaceOrientation == UIInterfaceOrientationPortrait); but notification always respond. so your'e code is Does not fit me. – bitmapdata.com Nov 18 '11 at 14:24