2011-08-19 74 views
2

我有一个UIViewController实例(viewController1),我想锁定在横向模式下,我能够做到。在按下按钮时,我推送另一个支持两个方向的UIViewController(viewController2)。现在,如果用户将viewController2的方向更改为纵向并返回viewController1,则viewController1也会将其方向更改为纵向。我怎样才能避免这种情况?UIViewController方向

在此先感谢。

回答

0

添加这些方法的视图控制器

  • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    回报(interfaceOrientation == UIInterfaceOrientationPortrait); }

那对第一

  • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    返回是); }

那第二

- (BOOL)shouldAutorotateToInterfaceOrientation:UIInterfaceOrientation)toInterfaceOrientation { 如果(UIInterfaceOrientationIsPortrait(toInterfaceOrientation)){ 返回YES; } return NO; }

+0

似乎没有工作。当我从纵向模式下的第二个视图控制器返回时,第一个视图控制器仍然进入纵向模式。顺便说一句我想锁定第一个视图控制器在横向模式。 –

0

如果这两个控制器都是UIViewController的实现,两个不同的类彼此!你可以在第一个实现方法shouldAutorotateToInterfaceOrientation!这应该工作,即使你回去!

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) { 
    return YES; 
} 
return NO;} 
+0

似乎不起作用。当我从纵向模式下的第二个视图控制器返回时,第一个视图控制器仍然进入纵向模式。顺便说一句我想锁定第一个视图控制器在横向模式。 –

0

你说推,所以我假设两个ViewControllers都在一个NavigationController。如果是这样,我将不得不让你失望,你想要的是不可能的。你的循环回调工作正常,他们响应旋转,你不能强制它。发生的是正确的行为。

最好的解决方案是防止用户回到以前的ViewController不支持的方向,例如隐藏后退按钮。

一段时间后,我做了自己的NavigationController(不从UIViewController继承,但它可以做同样的事情),我试图实现你正在尝试做的事情。在推送或弹出之前,如果即将显示的ViewController视图不支持当前方向,我将该视图控制器的视图转换90°,并强制将状态栏的方向改为新的ViewController支持的方向。 只要推或弹完成,我会做一个小技巧强制设备的旋转。如果从窗口中删除rootViewController的视图并重新添加它,响应者链将被强制经历所有循环回调。当发生这种情况时,我检查了ViewController的视图是否已转换并重置了该转换。

它确实工作,主要是。但是这是很乱的代码,它违背了Apple的当前策略,即rootViewController应负责处理方向。另外在iOS6中强制状态栏的方向保证有效。所以我真的建议不要这样做,我也从我自己的NavigationController中删除了这个。

相关问题