1

我想知道使用哪种技巧将视图控制器“不推送”到导航控制器堆栈(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 链接到情节提要的选项卡栏控制器。

难道没有别的办法了吗?

4

1 回答 1

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"];
于 2012-05-06T20:58:09.213 回答