带有导航控制器方向的Tabbar控制器ios 6

时间:2012-11-29 09:06:43

标签: ios uinavigationcontroller ios6 uitabbarcontroller

我目前正在开发一个项目,我们有一个带有4个标签的标签栏控制器,每个标签都有一个导航控制器。在每个导航控制器上都有多个视图控制器。

我在这里和其他地方阅读了很多帖子,目前我们已经完成了以下工作:

Subclassed UITabbarcontroller

- (BOOL)shouldAutorotate
{

    return [[[self.viewControllers objectAtIndex:self.selectedIndex]topViewController] shouldAutorotate];

}

- (NSUInteger) supportedInterfaceOrientations
{
    return [[[self.viewControllers objectAtIndex:self.selectedIndex]topViewController]supportedInterfaceOrientations];
}

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    return [[[self.viewControllers objectAtIndex:self.selectedIndex]topViewController] shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
}

如果我们在每个viewcontrollers中指定以下内容,这项工作正常:

- (NSUInteger) supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    return YES;
}

这将按预期将其锁定为Portrait。

但现在出现了真正的问题! 如果我们在其中一个选项卡上的viewcontroller中指定它应该旋转到横向它工作正常,但是当我们更改选项卡时它仍处于横向状态,这不是我们想要的!

总而言之,有没有人能够解决你如何将几乎所有视图锁定到给定方向的方法,并且可以更改标签,使其位于您指定的方向(此处为纵向)?

我还阅读了这篇文章iOS 6 UITabBarController supported orientation with current UINavigation controller,但正如一条评论中也提到“这对我来说几乎是有用的。问题是当我将标签切换到仅限肖像视图时我已经处于风景中旋转的肖像修复它,它不会旋转回景观,但我仍然需要它在第一次加载时的肖像“这里几乎是相同的..

1 个答案:

答案 0 :(得分:2)

我自己遇到了这个问题而且我找到了一个解决方案,它并不漂亮,但它确实有效。

在你的TabbarController子类中实现这个tabbarcontroller委托函数(记得设置委托):

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
    int selected = self.selectedIndex;
    UIViewController *con = [[UIViewController alloc] initWithNibName:@"XIBName" bundle:nil];
    [[self.viewControllers objectAtIndex:selected] pushViewController:con animated:NO];
    [[self.viewControllers objectAtIndex:selected]popViewControllerAnimated:NO];
    [[self.viewControllers objectAtIndex:selected] setDelegate:nil];
}

选项卡navigationcontroller中uinavigationcontroller的push和pop将使tabbarcontroller再次激活其Orientations函数,如果正确实现了方向代码,它将更改为您想要的方向。

我希望这会有所帮助,如果我需要详细解释任何内容,请随意发表评论。

最诚挚的问候 的Morten