【问题标题】:How to not push a segue into the Nav Controller Stack?如何不将 segue 推入导航控制器堆栈?
【发布时间】:2012-05-06 19:55:36
【问题描述】:

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

没有别的办法吗?

【问题讨论】:

    标签: objective-c ios uinavigationcontroller stack storyboard


    【解决方案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 中链接并且没有在代码中实例化,因此您需要从 Storyboard 而不是空代码中实例化它。确保标识符与情节提要中的 ViewController 的标识符匹配。

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

    【讨论】:

    • 我试过这个(更新了我的帖子),但并没有真正奏效...... =S
    • 如果 TabBarMain 链接到情节提要视图,您需要从情节提要进行初始化,而不是基本的初始化函数。我已添加到我的答案中。
    • 很高兴我能帮上忙 :) 快乐编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    相关资源
    最近更新 更多