在iOS中使用带有.xib文件的多个视图控制器时,尝试使用UNavigationController的子类

时间:2014-11-03 18:44:03

标签: ios uiviewcontroller uinavigationcontroller

我正在构建一个iOS应用程序,其中有多个由.xib文件构成的视图控制器。整个应用程序将允许纵向和横向方向,但前三个视图控制器将只是纵向。此后的屏幕仅为横向。出于这个原因,我创建了两个UINavigationController的子类,一个用于限制纵向模式中的前三个,以及横向模式中的最后一个。

目前,我可以显示第一个视图控制器,并将其锁定为纵向模式。这是我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    ViewControllerA *testViewA = [[ViewControllerA alloc] initWithNibName:@"ViewControllerA" bundle:nil];
    PortraitNavigationController *navController = [[PortraitNavigationController alloc] initWithRootViewController:testViewA];
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = navController;

    [self.window makeKeyAndVisible];

    return YES;
}

PortraitNavigationController(其子类UINavigationController)的代码包含一个方法,如下所示:

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

在ViewControllerA中,我有一个按钮,当按下它时,会调用ViewControllerB(它也会被锁定在纵向模式。我在按钮操作方法中的代码如下:

- (IBAction)buttonAction:(id)sender {

   PortraitBViewController *testBView = [[PortraitBViewController alloc] initWithNibName:@"PortraitBViewController" bundle:nil];
        PortraitNavigationController *portraitNav = [[PortraitNavigationController alloc] initWithRootViewController:testBView];

//How do I push this new view Controller on to the stack?

}

正如您在上面的评论中所看到的,如何将下一个视图控制器推送到此堆栈(当然,然后弹出以返回到前一个)?我遇到的问题是,就像传统的应用程序一样,我想拥有一堆视图控制器,除了在我的情况下我想使用自定义的UINavigationController类。

通常情况下,我会使用引用self.navigationController将下一个视图控制器推送到堆栈,但在这种情况下,因为我使用自定义导航控制器,看起来我将不得不创建一个新的引用到我正在使用的EACH视图控制器中的自定义导航控制器。如果是这种情况,那么这意味着我每次都在创建一个新的rootViewController,这实际上意味着,我将有三个不同的堆栈(每个堆栈一个视图控制器),而不是一个三个视图控制器的堆栈。

如何使用相同的自定义UINavigationController引用来调用每个视图控制器的push / pop?最后,我如何将这些视图控制器连接到另一个使用不同导航控制器的视图控制器,同时将所有内容保存在同一堆栈中?

1 个答案:

答案 0 :(得分:2)

如果您使用多个UINavigationControllers,您的生活将非常困难。您应该指定UIViewControllers中支持的方向,而不是UINavigationControllers中支持的方向。