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

时间:2012-03-06 17:08:04

标签: iphone objective-c uinavigationcontroller uitabbarcontroller

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

我希望允许用户向后移动单击该标签栏按钮时显示的默认控制器。从概念上讲,当用户单击标签栏按钮时显示的“主”控制器将是导航堆栈中的第二个控制器。

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

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

我的两个想法是实现这个:

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

我没有成功使用这两种方法。我见过应用程序主要是Twitter应用程序,你可以回到单击标签栏项目时加载的默认控制器。

任何人都知道如何做到这一点?我宁愿沿着标签栏按钮触发导航堆栈中的第二个控制器默认加载。

1 个答案:

答案 0 :(得分:0)

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

-tabBarController:didSelectViewController:

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