View Controllers in view Controller and orientation iOS

允我心安 提交于 2019-12-12 01:23:41

问题


I have iPAD app which has UIViewController A as root view Controller of Navigation Controller. Now i have 3 more View Controllers B,C, D as subview of ViewController A.

I want B not to respond orientation while C and D should respond to it.

Currently with code all of them respond to orientation change.

There was another answer which says make two separate root ViewControllers and add them into windows View. One of them non rotating and other rotating. I cant do that because i have header in ViewController A which switches B,C,D to make them front viewController.

Anyway please suggest.

Thanks


回答1:


You need to subclass the UINavigationController like this.

.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



回答2:


You can create subclass from UINavigationController or make category for it. And implement this methods:

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

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

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

And then, in your controllers you should implement this methods with orientations which you want.



来源:https://stackoverflow.com/questions/18185260/view-controllers-in-view-controller-and-orientation-ios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!