使用“模态推送”到 viewController 并且无法在顶部添加 UINavigationItem-(Controller, Bar)

Posted

技术标签:

【中文标题】使用“模态推送”到 viewController 并且无法在顶部添加 UINavigationItem-(Controller, Bar)【英文标题】:Using "modal push" to a viewController and not being able to add UINavigationItem-(Controller, Bar) at the top 【发布时间】:2013-01-05 11:55:35 【问题描述】:

在我的项目中,我有 1 viewController,它被所有其他 viewControllers 的“modal push”推送。我正在尝试向其添加UINavigationItem(顶部的栏),但它不起作用。我在项目的另一个地方有一个类似的 viewController,据我所知,我用它做了完全相同的事情,并且能够将 UINavigationItem 添加到它?

现在我需要帮助来了解为什么我无法将 UINavigationItem 添加到我的 viewController?我正在尝试使用以下代码:

 self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:self.nextButton,  self.menuButton, nil];

我没有收到任何错误或任何迹象表明它为什么不能在我的 viewController 上运行,只是什么也没发生?这是它的屏幕:http://tinypic.com/view.php?pic=2itisgp&s=6

viewController 连接到 tabBarUINavigationController 但这不重要,因为我决定使用 "modal" 推送它?如果我使用普通的“推送”,UINavigationItem 将出现,并将链接到应用程序的其余部分。但这就是问题所在,我希望它是一张幻灯片,有自己的 UINavigationBar(Item, controller) 或任何你称之为的东西。这背后的原因要复杂得多,在这里解释起来只会让人厌烦。所以让我们专注于为什么当使用“Modal push”时,我无法在此视图控制器中添加UINavigationItem(bar, controller) ??????有知道的请赐教!

【问题讨论】:

没有“模态推送”之类的东西。 push segue 仅由导航控制器使用,任何控制器都可以模态地呈现另一个。如果您尝试添加导航按钮的控制器未嵌入到导航控制器中,则 self.navigationItem 将为 nil。 【参考方案1】:

实现这一目标的一种简单方法:

UINavigationController *navigationController = [[UINavigationController alloc]initWithRootController:yourViewController];

[viewController presentModalViewController:navigationController animated:YES];

【讨论】:

我没有使用任何代码,我只是通过情节提要使用“模态”推送...。我已经尝试过这段代码,但结果相同,没有任何反应: ShowTaskViewController *detailViewController = [[ShowTaskViewController alloc]在里面]; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; navController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self.navigationController presentModalViewController:navController 动画:YES 完成:nil]; [导航控制器发布]; [detailViewController 发布]; UIModalTransitionStyleCrossDissolve 不是modalTransitionStyle 的类型。也许与此有关。 不,与此无关:/。我的项目看起来像这样 TabBarController --> NavigationController --> FristViewController --(modal push from storyboard) --> viewController(这是我无法启用 UINavigationItem 的控制器)。 @user1293618,当 FirstViewController 嵌入导航控制器时,为什么要对 viewController 进行模态搜索?只需将 segue 更改为“push”即可。 说来话长,但我希望 viewController 允许横向/纵向模式,并将应用程序中的其余 viewController 锁定为仅纵向。因为我的 TabBarController 是我的应用程序中的初始控制器,所以一切都将从它继承。所以为了实现这一切,我最好的办法是进行模态推送,这样它就不会从我的 TabBarController/NavigationControllers 继承。【参考方案2】:

如果您使用 Storyboard,则必须将导航控制器直接嵌入到呈现的模态控制器(编辑器 > 嵌入 > 导航控制器)

您的故事板应该如下所示:

FirstVC -> Navigation Controller -> SecondVC

【讨论】:

我的项目现在看起来像这样:TabBarController --> NavigationController --> FristViewController --(从情节提要的模态推送) --> SecondViewController(这是我无法启用 UINavigationItem 的控制器)。在 FristVC 和 SecondVC 之间添加另一个 NavigationController 对我来说是一项相当大的工作。你真的认为这和这有关系吗? :S 别担心,这是使用故事板时的正常情况。通过执行 UINavigationController *navController = [[UINavigationController alloc] initWithRootController:secondVC]; 将导航控制器嵌入到您的 SecondVC 中,其行为与以编程方式完全相同。然后以模态方式呈现导航控制器

以上是关于使用“模态推送”到 viewController 并且无法在顶部添加 UINavigationItem-(Controller, Bar)的主要内容,如果未能解决你的问题,请参考以下文章

通过应用程序的故事板保持导航控制器

故事板无需单击按钮即可应用推送(模态,推送,自定义)

你如何将数据从 ViewController 传递到包含单独 ViewController 的 PageViewController,然后这些 ViewController 将使用这些数据?

无法使用 mapKit 从 ViewController 将坐标发送到具有委托的另一个 viewController

将图像从 ViewController 传递到 ViewController

iOS - 使用 xib 中的 tabBarController 将数据从一个 viewController 传递到另一个 viewController