使用 PushViewController 时选项卡不显示

Posted

技术标签:

【中文标题】使用 PushViewController 时选项卡不显示【英文标题】:Tabs do not show when using PushViewController 【发布时间】:2013-10-23 21:30:24 【问题描述】:

我正在尝试使用以下代码来显示标签栏控制器

UITabBarController *tc = [[self storyboard] instantiateViewControllerWithIdentifier:@"tabbarcontroller"];
[self.navigationController pushViewController:tc animated:YES];

它确实加载了视图,我可以告诉它我希望它默认到哪个选项卡。问题是标签不显示。根据我的阅读,我认为这与将选项卡控制器放在导航控制器中有关,但我找不到任何解决方案。

【问题讨论】:

这里有几个假问题,identfyer 正确吗?导航控制器是零吗?你在用故事板吗? 【参考方案1】:

如果你使用 Storyboard,使用 pushViewController 方法是一个不好的选择(如果它有效的话)。您必须插入一个“segue”。 进入情节提要并在按住 ctrl 按钮的同时单击主控制器(必须打开 tabViewController)然后释放对 tabBarController 的单击

现在你有了转场。点击出现的 circle 并为此 segue 选择一个标识符,例如:MainToTab

现在在您的方法中,您只需调用:

[self performSegueWithIdentifier:@"MainToTab" sender:self];

此外,如果你想管理目标控制器上的属性(通过segue),你可以实现这个方法:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

    if ([segue.identifier isEqualToString:@"MainToTab"]) 
        UITabViewController *tb = (UITabViewController *)segue.destinationViewController;
        //set the properties...
    


当您启动前一个方法时,会自动调用此方法。

【讨论】:

segue 在执行此操作时可以完美运行,但我有一个 tabbarcontroller 需要能够从多个位置加载。 好的,你必须按下是的。你的代码是正确的。您必须确保标识符正确无误。 tabViewController 显示了吗? 我决定重组它并取消 tabbarcontroller。 啊哈哈,实际上如果你需要多个 tabViewController,也许这不是最好的选择 ;)【参考方案2】:

您想要在UITabBarController 中的内容是UIViewControllers,可能在UINavigationController 中。

您也不应该推送UITabBarController。可以看苹果的解释here:

使用标签栏控制器的应用也可以使用导航 一个或多个选项卡中的控制器。当结合这两种类型的 同一用户界面中的视图控制器,标签栏控制器 始终充当导航控制器的包装器。

使用标签栏控制器最常见的方法是嵌入其视图 在您的应用程序的主窗口中。 (...)

您仍然可以模态地呈现它:

显示标签栏控制器是可能的(虽然不常见) 模态在您的应用程序中。标签栏界面通常安装在您的 应用程序的主窗口,仅在需要时更新。但是,您可以 如果您的界面设计,则以模态方式显示标签栏控制器 似乎证明了这一点。例如,从应用程序的主要切换 操作模式到使用标签栏的完全不同的模式 界面,您可以模态显示辅助标签栏控制器 使用交叉淡入淡出过渡。

【讨论】:

以上是关于使用 PushViewController 时选项卡不显示的主要内容,如果未能解决你的问题,请参考以下文章

如何同时切换 tab 和 pushViewController?

来自 appDelegate 的 pushViewController - 问题

pushViewController 在多个标签应用程序中啥都不做?

使用 pushViewController 时没有 Xib 的 UIViewController 显示空白

使用 pushViewController 时,我的视图控制器未正确初始化?

带有 tabBarController 的 PushViewController 不起作用