如何不将segue推入导航控制器堆栈?

时间:2012-05-06 19:55:36

标签: objective-c ios uinavigationcontroller stack storyboard

我想知道用什么样的技巧将视图控制器“推”到导航控制器堆栈(iOS)中

我有这个:
如果用户未登录,则显示视图A,然后显示B
如果用户已登录,则显示B

当我使用故事板时,如果用户已登录,我使用了performSegue,因此他直接进入B.但是使用此方法,导航控制器会在堆栈中获取视图A.

我想在一些虚空中弹出一个级别的堆栈(但我不知道该怎么做) 我还在考虑不将视图推入导航控制器堆栈(但我不知道该怎么做)
感谢


更新:

我试过这个:

//The view B
TabBarMain* mainViewController = [[TabBarMain alloc] init];
//If already logged in
if([username length] == 0)
{
    NSArray *viewControllers = [NSArray arrayWithObject:mainViewController];
    [self.navigationController setViewControllers:viewControllers animated:NO];
}

此代码的问题在于它向我显示黑屏(不会崩溃)。看来我需要初始化一些东西而且我的TabBarMain.m中什么都没有,我不知道该写些什么。此TabBarMain链接到故事板的标签栏控制器。

没有别的办法吗?

1 个答案:

答案 0 :(得分:1)

在rootViewController的viewDidLoad中尝试使用此大小。

- (void)viewDidLoad
{
    NSArray *viewControllers

    if (logged) {
        NSArray *viewControllers = [NSArray arrayWithObject:viewControllerB];
    } else {
        NSArray *viewControllers = [NSArray arrayWithObject:viewControllerA];
    }

    [self.navigationController setViewControllers:viewControllers animated:NO];
}

由于您的viewController在Storyboard中链接而未在代码中实例化,因此您需要从故事板中实例化它而不是空代码。确保标识符与故事板中ViewController的标识符相匹配。

TabBarMain *mainViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"tabBarMain"];