TabBarController:以不同方向定向视图

时间:2014-06-29 18:53:53

标签: ios objective-c ios7 uinavigationcontroller uitabbarcontroller

我无法保留当前的观看方向。在下面的设置中,我能够将第一个视图控制器锁定为纵向,将第二个视图控制器锁定为横向或纵向。但是,当我向选项卡控制器添加第二个导航控制器/ rootviewcontroller时,整个项目中的所有视图都将同时显示为横向和纵向。无论我是否在第一个导航控制器中将相同的代码实现到第二个导航控制器

,都会发生这种情况

我希望能够保留我当前的视图控制器方向,同时添加额外的navcontroller> viewcontroller

我在故事板中有以下设置: enter image description here

这是我想要实现的目标: enter image description here

tabbarcontroller应支持所有方向,导航控制器支持所有方向,第一个视图控制器和表视图控制器仅支持纵向,第二个视图控制器支持横向和纵向。

以下是每个当前视图控制器的方法

TabViewController.m

-(BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}

NavController.m

-(BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}

First View Controller.m

-(BOOL)shouldAutorotate

{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{

    return UIInterfaceOrientationPortrait;
}

Second View Controller.m

-(BOOL)shouldAutorotate

{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{

    return UIInterfaceOrientationLandscapeLeft;
}

我很感激您解决这个问题的任何帮助。它已成为我生存的祸根

1 个答案:

答案 0 :(得分:1)

看起来你已经将一个tabbar控制器子类化了。您可以使用其委派协议在运行时控制方向,而不是这样做。

– tabBarControllerSupportedInterfaceOrientations:
– tabBarControllerPreferredInterfaceOrientationForPresentation:

– navigationControllerPreferredInterfaceOrientationForPresentation:
– navigationControllerSupportedInterfaceOrientations:

你可以把你的逻辑放在那些方法中我认为这样做会更好,而不是子类化。容器视图控制器通常接管单个vc旋转实现。