尝试对导航控制器进行子类化,以便在 iOS 中以横向模式加载具有单独的 .xib 文件的外部视图控制器

问题描述 投票:0回答:1

我有一个使用故事板创建的 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 并使其以横向模式显示?

ios uiviewcontroller uinavigationcontroller xib
1个回答
1
投票

对于导航控制器的子类进行定向,您可以尝试以下代码(作为示例):

// .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

更新:(此代码适用于ios6)

© www.soinside.com 2019 - 2024. All rights reserved.