从标签栏按钮将视图控制器推送到导航控制器上

Posted

技术标签:

【中文标题】从标签栏按钮将视图控制器推送到导航控制器上【英文标题】: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 是否为零。 如何正确嵌入? 【参考方案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 传递数据或将其显示出来

【讨论】:

以上是关于从标签栏按钮将视图控制器推送到导航控制器上的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 prepareForSegue 方法从视图控制器推送到导航视图控制器?

导航栏上没有后退按钮

将 UITableViewController 推送到导航堆栈时看不到导航栏

当一个新的视图控制器被推送到导航控制器时,将一个子视图保持在屏幕上的同一位置?

导航栏在推送到新视图控制器时会缩小

使用 overCurrentContext 呈现视图控制器,然后推送到导航堆栈会导致导航栏重叠