导航控制器应用中2个UIView控制器的方向问题

时间:2012-05-25 14:19:45

标签: iphone objective-c ios uinavigationcontroller orientation

我有一个tabbar应用程序。第一个选项卡的项目是导航控制器。 导航控制器在他的堆栈中有4个项目。 我想提供轮换。但在tabbar应用程序中它是问题,这就是我创建自己的tabbarcontroller并覆盖方法的原因:

@interface RotatingTabBarController : UITabBarController

@end

@implementation RotatingTabBarController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    if([self.selectedViewController isKindOfClass:[UINavigationController class]]){
        BOOL f = [[(UINavigationController*)self.selectedViewController visibleViewController] shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
        return f;
    } else {
        BOOL f = [self.selectedViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
        return f;
    }
}

@end

之后如果我提供了正确的UIInterfaceOrientation支持,我的控制器将支持自动旋转。但是没有我的自定义RotatingTabBarController它似乎是不可能的

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

问题是: 当我在这个viewcontroller的shouldAutorotateToInterfaceOrientation中的导航控制器中推送FirstViewController时,我只提供纵向方向, 但是当我按下SecondViewController(我提供纵向和横向)时,如果SecondViewController的当前界面方向是横向的,我按下后退按钮(SecondViewController从堆栈弹出并出现FirstViewController),FirstViewController的方向是横向的。但是在shouldAutorotateToInterfaceOrientation方法中,我只为他提供了纵向方向。

2 个答案:

答案 0 :(得分:3)

实际上你不应该继承UITabbarController类。

  

UITabBarController类实现了一个专门的视图控制器,用于管理无线电样式的选择接口。此类不适用于子类。

来自UITabBarController Class Reference

如果您查看控制器覆盖

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

方法,应该没问题。

我认为支持某些观看横向广告并不支持应用中的观看次数并不是一个好主意。

您已经发现了原因,如果用户在横向模式下按下按钮会怎么样?

这里应该做什么,在设备横向显示时旋转到移植设备?

如果您想这样做,则没有简单的方法可以强制设备更改方向。你必须使用转换来处理你自己的视图方向。

您可以使用模型视图控制器支持视图的不同方向,模型视图控制器不在导航控制器的堆栈上。

答案 1 :(得分:0)

我使用了模态窗口并在横向方向隐藏了后退按钮。它解决了这个问题。