从任何其他选项卡的视图控制器中弹出第二个选项卡的根视图(默认)

Posted

技术标签:

【中文标题】从任何其他选项卡的视图控制器中弹出第二个选项卡的根视图(默认)【英文标题】:pop the root view(default) of second tab from the view controller of any other tab 【发布时间】:2012-02-14 14:58:01 【问题描述】:

我的应用程序由 TabBarController 和 Navigation Controller 组成。我有两个选项卡作为 tabA 和 tabB。 默认选择选项卡是 1(tabB),视图控制器 L(当应用程序完成启动时)。现在用户可以导航为:L=>M=>N=>O。 tabA 的视图控制器是 x。用户可以导航为:x=>y=>z。 z 视图控制器顶部有一个按钮,它应该使用视图控制器 L 导航/推送/弹出消费者到 tabB 的根视图控制器。

任何建议,谢谢

【问题讨论】:

【参考方案1】:

如果我正确理解您的问题,这应该不难。

该方法应如下所示:

- (void) pop

    UIViewController * target = [[self.tabBarController viewControllers] objectAtIndex:1];

    [target.navigationController popToRootViewControllerAnimated: NO];

    [self.tabBarController setSelectedIndex:1];

【讨论】:

+1 :使用这个答案...你比我快几秒钟 :) Uuuhh 我讨厌这种情况发生。对不起:) 谢谢,我已经能够弹出到根视图控制器,但它总是弹出到 tabB.Means 的视图控制器中的最后一个导航项,如果消费者从 :L=>M=>N 导航=> O 在 tabB 中,现在将 tabB 留在它所在的位置(L/M/N/o)。现在从 tabA 如果我尝试弹出 tabB 的根视图控制器,它会弹出到他在 tabB 中离开导航的位置(或者 L /M/N/O)。我只想用选定的选项卡 1 将他导航到 L(选定的选项卡工作正常)。 在不了解您的实现细节的情况下,很难确切地知道如何做到这一点,但您应该能够使用视图控制器的 tabbarcontroller 和 navigationcontroller 属性轻松实现所需。 @PeterSarnowski 有一些上下文问题。我必须做这样的事情:在 appdelegate 文件中:UIViewController * 目标,设置属性(非原子,保留)并合成它。现在在 viewController(rootController ) viewDidLoad 我这样做:UIAppdelegate.target=self;。您的代码中的一个小改动为:[UIAppdelegate.target.navigationController popToRootViewControllerAnimated: NO]; [UIAppdelegate.tabBarController setSelectedIndex:1]; [self.tabBarController setSelectedIndex:1];【参考方案2】:

你需要弹出到当前标签栏的根目录,然后使用标签栏控制器方法通过setSelectedIndex方法选择标签栏按钮..

【讨论】:

【参考方案3】:

我遇到了类似的问题,但我想我找到了一种更简单的方法来处理它。在用户可能最终使用的视图控制器(初始问题中的 O 或 Z)中,我放置了

    [self.navigationController popToRootViewControllerAnimated:NO];

在那些 VC 看来WillDisappear。看起来很简单。我是否错过了我不想这样做的原因?就像最初的提问者一样,我总是想从我的标签的根 VC 开始,而不管用户上次在那个标签上离开的位置。

快速更新:我构建了我自己的拆分视图控制器版本,并将上面的行添加到 viewWillDisappear 在 iPad 上做了一些不受欢迎的事情,所以我不得不添加一个条件来检查设备类型(它不受无论如何,标签栏问题,因为两个视图控制器都是我构造的 splitVC 的一部分),但似乎在做我想做的事。

【讨论】:

以上是关于从任何其他选项卡的视图控制器中弹出第二个选项卡的根视图(默认)的主要内容,如果未能解决你的问题,请参考以下文章

第二个选项卡的 UITabbar 项目标题/名称消失

如何在应用启动时加载其他选项卡的视图?

再次按下时禁用所选选项卡的重新初始化

SetFocus 和 KillFocus

QMdiArea:第一个选项卡工作正常,第二个选项卡的内容太小

具有多个选项卡的 Linq to Excel [重复]