将选项卡栏项与在其堆栈中显示第二个视图控制器的导航控制器相关联?

Posted

技术标签:

【中文标题】将选项卡栏项与在其堆栈中显示第二个视图控制器的导航控制器相关联?【英文标题】:Associate tab bar item with navigation controller that displays the second view controller in it's stack? 【发布时间】:2012-03-06 17:08:03 【问题描述】:

我正在创建一个基于选项卡的应用程序。按下其中一个选项卡按钮会显示导航控制器。依次显示与该导航控制器关联的默认根视图控制器。

我想让用户回到点击标签栏按钮时显示的默认控制器。从概念上讲,当用户单击标签栏按钮时显示的“主”控制器将是导航堆栈中的第二个控制器。

我这样做的原因是“后退”控制器是一种设置屏幕。更改设置将有效地使“主”控制器无效并且需要重新创建。我知道我可以将设置屏幕作为模态视图控制器进行设置,但是在更改设置后要关闭模态控制器时,我将不得不销毁“后面的主控制器并重建它。

所以我的想法是将“主”控制器从堆栈中弹出到设置屏幕,然后一旦他们选择了设置,就将“主”视图控制器的新实例推送到堆栈上。

我的两个想法是:

将导航控制器的根控制器设置为我的“后”控制器,并将“主”视图控制器推到顶部。然后以某种方式覆盖标签栏按钮,使其始终首先显示第二个控制器,这会在导航栏中显示后退按钮。 另一个想法是将“主”视图控制器设置为导航控制器的根,然后向导航栏添加一个自定义后退按钮,单击该按钮时会以某种方式在当前控制器之前插入“后退”控制器,然后弹出当点击它。

这两种方法我都没有成功。我见过的应用程序主要是 Twitter 应用程序,在这些应用程序中,您可以返回点击标签栏项目时加载的默认控制器。

有人知道怎么做吗?我宁愿向下标签栏按钮触发导航堆栈中的第二个控制器默认加载。

【问题讨论】:

是否需要重新构建主控制器或者您可以对其进行一些修改以应用新设置? 【参考方案1】:

如果这是您想要采用的方法,您可以将自己设置为 tabcontroller 委托并实现该方法:

-tabBarController:didSelectViewController:

在这里你可以检查选择的控制器是否是你的导航控制器,然后弹出到你想要的viewController。

【讨论】:

以上是关于将选项卡栏项与在其堆栈中显示第二个视图控制器的导航控制器相关联?的主要内容,如果未能解决你的问题,请参考以下文章

如何快速隐藏嵌入在导航堆栈中的视图控制器中的选项卡栏?

将 UIViewController 推送到导航堆栈时如何显示选项卡栏

在三个视图控制器之间导航,其中三个视图控制器都在一个选项卡栏视图中

将标签栏添加到导航控制器

有条件地在选项卡栏项后面选择viewcontroller

当用户已经登录另一个选项卡-iOS 时选择选项卡栏时导航另一个屏幕