如何使用给定的根视图控制器和初始视图控制器实例化故事板?

时间:2014-06-19 11:25:18

标签: ios objective-c uiviewcontroller storyboard navigationcontroller

我的应用程序中有一个带有导航控制器和几个视图的故事板。这会自动将带有后退按钮的导航栏放入任何不是根视图的视图中。

然而,有时我会从这个故事板导航到一个单独的笔尖。我想导航回故事板,但不一定要回到原始的根视图。我目前使用这种方法:

+(void) TransitionOnStoryboard:(NSString*)storyboard to:(NSString*)identifier withViewController:(UIViewController*)viewController
{
    UIStoryboard *sb = [UIStoryboard storyboardWithName:storyboard bundle:nil];
    UIViewController *vc = [sb instantiateViewControllerWithIdentifier:identifier];
    vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [viewController presentViewController:vc animated:YES completion:NULL];
}

这显示了我想要的视图但没有导航栏。如何指定导航控制器或根视图,以便应用程序知道如何将带有后退按钮的导航栏放入?

由于

2 个答案:

答案 0 :(得分:0)

答案是将导航控制器放在从笔尖添加的视图控制器下面。

将笔尖呈现为完整的0屏幕模态。如果您的导航栏,根据需要摆脱。从新的视图控制器,你可以推送更多的模态,添加导航控制器,或其他任何。

请注意,您可以完成所有这些操作并保留在故事板中。

完成后,关闭模式以显示导航控制器,然后重新开始使用故事板。您可以将新的视图控制器推送到导航控制器上而不需要动画,当您弹出来自笔尖的模态时,它应该显示为最前面的VC。

答案 1 :(得分:0)

我确信这不是解决这个问题的理想方式,但它对我来说确实很有效。

基本上,我从视图控制器中删除了自我导航离开故事板后生成的所有视图,但在当前视图之前并弹出当前视图。在这种情况下,这些视图属于一个类(CheckboxListViewController),因此可以简单地删除如下:

+(void) navigateToMainMenu:(UINavigationController*)navigationController
{
    [QuickView removeFromNavigationController:navigationController allOfViewControllerWithClass:[CheckboxListViewController class]];
    [navigationController popViewControllerAnimated:YES];
}

+(void) removeFromNavigationController:(UINavigationController *)navigationController allOfViewControllerWithClass:(Class)viewControllerClass
{
    NSMutableArray *keptViewControllers = [[NSMutableArray alloc]init];
    for (UIViewController *viewController in navigationController.viewControllers)
        if (![viewController isKindOfClass:viewControllerClass])
            [keptViewControllers addObject:viewController];
    navigationController.viewControllers = keptViewControllers;
}

(注意 - QuickView是包含这些方法的类的名称。)。

您不希望弹出窗口导航回来的任何其他类可以通过调用:

删除
[QuickView removeFromNavigationController:navigationController allOfViewControllerWithClass:[YourClassName class]];

在navigateToMenu方法中。