【问题标题】:Pushing a view controller onto a navigation controller from a tab bar button从标签栏按钮将视图控制器推送到导航控制器上
【发布时间】:2014-07-23 08:30:07
【问题描述】:

我有一个带有如下按钮的标签栏控制器:

- (void) addButtonPressed:(UIButton *) sender
{    
    [sender setBackgroundColor:[UIColor regularColor]];

    PostViewController *post = [[PostViewController alloc] init];

    [self.navigationController pushViewController:post animated:YES];
}

此代码运行,但 PostViewController 从未显示,标签栏控制器仍然存在。

如何推送到新控制器?

已创建 NavigationController,并将 StartViewController 添加为 rootController。

然后在 StartViewController 我有:

TabBarController *tab = [[TabBarController alloc] init];

    // Presentation
[self presentViewController:tab animated:NO completion:nil];

【问题讨论】:

  • 能否告诉我您的标签栏控制器代码是如何创建的?
  • 您的标签栏控制器是否嵌入在导航控制器中?
  • 但如问题所示 TabBarController 未嵌入导航控制器中。
  • 如果你的 viewController 被推送,那么只有它的子视图控制器获取根视图控制器的导航控制器,但在你正在呈现的情况下,检查 navigationController 是否为零。
  • 如何正确嵌入?

标签: ios objective-c uinavigationcontroller uitabbarcontroller


【解决方案1】:

您需要在标签栏中创建单独的导航控制器。

假设有 3 个选项卡 A、B 和 C。所有三个选项卡都具有从一个视图导航到另一个视图的功能。而不是您需要创建三个单独的导航控制器 eact 指向选项卡 A、B 和 C。通过这种方式,您可以导航到特定选项卡中的任何类。

查看此link 了解更多详情。

希望这会对您有所帮助。快乐编码:)

【讨论】:

  • 有人告诉你只创建一个导航控制器并使用 initRootViewController 设置它
  • 是的,当我们有简单的基于导航的应用程序时,我们会这样做
  • 这只有在标签栏是你的 rootViewController 时才有效
【解决方案2】:

您可能需要将标签栏控制器嵌入到导航控制器中,在情节提要中单击 tabbarController 以便它以所有蓝线突出显示,然后转到 Xcode 中的编辑器选择嵌入> UINavigationController ..如果您想以编程方式执行此操作,则在您设置窗口的AppDelegate 中使用此::

UINavigationController*  navigationController = [[UINavigationController alloc] initWithRootViewController:tabBarController];
navigationController.toolbarHidden=YES;
navigationController.navigationBarHidden=YES;
self.window.rootViewController =navigationController; 

【讨论】:

    【解决方案3】:

    如果你使用 .xib 那么你必须使用 NSBundle 来加载 nib

    如果您使用情节提要,则需要使用 prepareForSegue 传递数据或将其显示出来

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-23
      • 2018-09-24
      • 2011-09-18
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      相关资源
      最近更新 更多