1

以下似乎是一个典型的用例:您使用显示登录屏幕的 LoginViewController 启动应用程序。用户成功登录后,您希望显示应用程序的主视图(我们称之为 MainViewController)。

您不想将 LoginViewController 放入 UINavigationController 并随后将 MainViewController 推到它上面,因为没有理由将 LoginViewController 保持在堆栈底部,因为它永远不会再次显示。此外,在应用程序的后续启动中,您将确定您已经获得了某种登录令牌,并且根本不会显示 LoginViewController,因此从启动到启动导航控制器堆栈会出现不一致.

出于同样的原因,您也不想从 LoginViewController 模态显示 MainViewController(如果它是模态的,它将保持 LoginViewController 加载在后面)。

您也不想将窗口的 rootViewController 设置为 MainViewController(之前设置为 LoginViewController),因为这不允许您进行转换。

我想要一些关于我上面的逻辑是否有缺陷的反馈,实际上这些场景之一是正确的吗?或者如果没有,其他人在为这种情况做些什么?

4

2 回答 2

4

如果您没有登录令牌,为什么不将 MainViewController 设为您应用的根视图控制器,并在启动时以模态方式显示 LoginViewController?

于 2013-02-06T21:53:04.043 回答
2

我有这种应用程序,我已经通过删除作为当前对象的 LoginViewController 并添加 TabBarController 和 HomeViewController 来实现这样的焦点

  /* remove the  current Login screen and show the 2nd tab */ 
    NSMutableArray* newArray = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
    [newArray removeObject:self];
    [self.tabBarController setViewControllers:newArray animated:YES];

当使用从应用程序注销时,我创建登录屏幕并添加到堆栈中,否则直接进入 HomeViewController

当从应用程序中使用注销时,我将 LoginViewController 添加回堆栈并将 UITabBarController 的当前索引分配给 LoginViewController 类似这样

 NSMutableArray *array =[NSMutableArray arrayWithObject:loginController];
        NSMutableArray* oldArray = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers];
        [array addObjectsFromArray:oldArray];

        [self.tabBarController setViewControllers:array animated:YES];
        [self.tabBarController setSelectedIndex:0];

        self.tabBarController.tabBar.hidden=YES;
于 2013-02-06T21:52:48.487 回答