iOS 6 ViewController正在旋转,但不应该

时间:2012-09-21 07:55:19

标签: uiviewcontroller ios6 xcode4.5

我希望我的几个应用程序视图控制器不在iOS 6.0中旋转。 这就是我在iOS 6中进行旋转所能做到的:

1。)在应用程序中设置windows rootviewController:didFinishLaunchingWithOptions:

self.window.rootViewController = self.tabBarController;

2.。)在我的目标中设置“支持的接口方向”(在XCode中),这样我就可以使用所有方向

3.)实现了新的iOS 6.0轮换功能

- (BOOL) shouldAutorotate {

    return YES;
}


-(NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskAll;
}

4.)由于某些原因,我将UINavigationController子类化并实现了这些新功能并使用了这个新的NavigationController而不是原始的。

到目前为止一切顺利,所有视觉控制器现在都可以旋转到每个方向。现在我想要几个viewController不旋转,只留在肖像。但是当我在这样的特定视图控制器中设置新的旋转方法时,它仍然会旋转到每个方向:

- (BOOL) shouldAutorotate {

    return NO;
}


-(NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskPortrait;
}

同样设置navigationController的旋转功能如上所述不会改变任何东西。 (所有视图控制器都可以旋转到每个方向)

我做错了什么?

编辑:

同样设置首选的Interfaceorientation不会改变任何内容:

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {

    return UIInterfaceOrientationMaskPortrait;
}

3 个答案:

答案 0 :(得分:11)

如果您希望我们的所有导航控制器都尊重顶视图控制器,您可以使用类别。我发现它比继承更容易。

@implementation UINavigationController (Rotation_IOS6)

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

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

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

@end

答案 1 :(得分:0)

这对我有用:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return NO;
}

答案 2 :(得分:0)

您需要创建UITabBarController的类别以支持自动旋转

.h文件的

代码为

@interface UITabBarController (autoRotate)<UITabBarControllerDelegate>

    -(BOOL)shouldAutorotate;
    - (NSUInteger)supportedInterfaceOrientations;

@end
.m文件的

代码为

-(BOOL)shouldAutorotate {

    AppDelegate *delegate= (AppDelegate*)[[UIApplication sharedApplication]delegate];
    return [delegate.tabBarController.selectedViewController shouldAutorotate];
}


- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

注意:AppDelegate的名称将随您项目的AppDelegate文件名一起更改。