1

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

@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

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

4

2 回答 2

3

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

UITabBarController 类实现了一个专门的视图控制器,它管理一个单选风格的选择界面。此类不用于子类化。

来自UITabBarController 类参考

如果您查看控制器覆盖

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

方法,应该没问题。

我认为支持某些视图横向和某些不在应用程序中的视图不是一个好主意。

你已经找到了原因,如果用户在横向模式下按下返回按钮怎么办?

这里应该做什么,当设备具有横向方向时旋转到纵向?

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

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

于 2012-05-25T14:43:10.720 回答
0

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

于 2012-06-27T10:54:05.633 回答