在视图中查看控制器控制器和方向iOS

时间:2013-08-12 10:58:09

标签: iphone ios uiviewcontroller uinavigationcontroller uianimation

我有iPAD app,它有UIViewController A作为根视图导航控制器的控制器。 现在我还有3个View Controllers B,C,D作为ViewController A的子视图。

我希望B不响应方向,而C和D应该响应它。

目前,所有代码都会响应方向更改。

另一个答案是说两个单独的根ViewControllers并将它们添加到windows View中。其中一个非旋转和其他旋转。我不能这样做,因为我在ViewController A中有标题,它切换B,C,D使它们成为前面的viewController。

无论如何请建议。

由于

2 个答案:

答案 0 :(得分:1)

你需要像这样继承UINavigationController。

·H

#import <UIKit/UIKit.h>

@interface UINavigationController (Rotation)

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

@end

.M

#import "UINavigationController+Rotation.h"

@implementation UINavigationController (Rotation)

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    if ([self visibleViewController] && [[self visibleViewController] isKindOfClass:[B class]]) {
        return UIInterfaceOrientationMaskAll;
    }
    return UIInterfaceOrientationMaskPortrait;
}

@end

答案 1 :(得分:0)

您可以从UINavigationController创建子类或为其创建类别。并实现这些方法:

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

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

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

然后,在您的控制器中,您应该使用您想要的方向来实现此方法。