ios 最佳实践 - 导航和选项卡控制器以及推送/弹出

Posted

技术标签:

【中文标题】ios 最佳实践 - 导航和选项卡控制器以及推送/弹出【英文标题】:ios best practices- navigation and tab controllers and push/pop 【发布时间】:2011-11-22 00:28:56 【问题描述】:

我的问题:

我的应用需要用户登录,所以我展示的第一个视图是登录视图。如果我们登录了,那么我们会显示应用视图,它是一个标签栏控制器。这些选项卡之一是帐户信息 + 注销。注销时,我想返回登录屏幕。

我的解决方案:

根视图是一个导航控制器,它保存着主视图。主视图是透明的,只是说你没有登录吗?将帐户屏幕推送到堆栈上。如果已登录,则将选项卡控制器视图推送到堆栈上。选项卡控制器中的每个选项卡都是一个导航控制器。单击帐户选项卡会将帐户视图上的帐户视图推送到堆栈上。帐户视图有一个注销按钮,它会弹出 2 个视图(并且不起作用):

 // Go to main view (2 views up) to show default login screen (as we won't be logged in anymore)
    UINavigationController *navController = self.navigationController;
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

我认为是问题所在:

我在顶层的导航控制器与标签控制器中的较低级别的导航控制器不同。

我的问题看起来很典型,但我的解决方案似乎很笨拙。这不是最好的方法!有什么建议吗?

【问题讨论】:

【参考方案1】:

试试这样的?看起来很复杂,但让我们尝试一下。

[self.navigationController popViewControllerAnimated: NO];
[self.tabBarController.navigationController popViewControllerAnimated: YES];

【讨论】:

这似乎工作正常。我想我只是将选项卡视图粘贴在堆栈顶部,并且只使用位于屏幕底部的选项卡,可能比拥有多个导航控制器更容易在启动时隐藏它们

以上是关于ios 最佳实践 - 导航和选项卡控制器以及推送/弹出的主要内容,如果未能解决你的问题,请参考以下文章

iOS – 在导航堆栈中显示一个视图控制器

单击推送通知时,正确重定向到选项卡栏导航控制器内的视图控制器

iOS - 收到推送通知后显示视图

Swift 2:更改与选项卡栏控制器相关的视图上的导航标题

iOS 以编程方式转到选项卡和推送视图控制器

弹出导航控制器并选择选项卡?