我有一个使用情节提要创建的iPad应用程序。我创建了另一个单独的viewController,它是使用单独的.xib文件创建的。我需要从主应用程序调用此viewController,然后在以后关闭以返回到主应用程序。到目前为止,我已经能够做到。我的问题是,因为我使用导航控制器来调用此辅助视图控制器,所以无法以横向模式加载此视图控制器。我只能以纵向模式加载它。通过本次论坛讨论以及我所做的任何研究,我了解到需要对导航控制器进行子类化,然后才能以横向模式加载此辅助视图控制器。

我的辅助视图控制器(NextViewController)中包含以下方法,但无效:

-(BOOL)shouldAutorotate
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}


这是调用viewController(MainViewController)中的代码,该代码调用NextViewController,而NextViewController依次以纵向模式而不是所需的横向模式显示:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    _nextView = [[NextLandscapeViewController alloc] initWithNibName:@"NextLandscapeViewController" bundle:nil];
    [_nextView setDelegate:(id)self];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:_nextView];
    [self presentViewController:navigationController animated:YES completion:nil];

}


正如我所指出的那样,我需要的解决方案是对导航控制器进行子类化,但是老实说,我以前从未做到过,也不知道该怎么做。有人可以告诉我如何做到这一点,以便我可以调用NextViewController并将其以横向模式显示吗?

在此先感谢所有答复。

最佳答案

对于来自Navigation Controller的子类进行定向,您可以尝试以下代码(例如):

// .h - file
@interface MyNavigationController : UINavigationController

@end

// .m - file
#import "MyNavigationController.h"

@implementation MyNavigationController

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

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

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

@end


upd :(此代码在ios6上有效)

关于ios - 尝试子类化导航 Controller ,以便在iOS的横向模式下使用单独的.xib文件加载外部View Controller,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18426356/

10-12 21:35