不能用导航栏做任何事情

Posted

技术标签:

【中文标题】不能用导航栏做任何事情【英文标题】:Can't do ANYTHING with navigation bar 【发布时间】:2013-07-17 16:26:57 【问题描述】:

我有这个结构:

当我想从情节提要中添加“UINavigationItem”时,导航栏已“禁用”,因此我尝试以编程方式添加右键:

UIBarButtonItem *button = [[UIBarButtonItem alloc]
                           initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                           target:self
                           action:@selector(showPickerView:)];
self.navigationItem.rightBarButtonItem = button;

但是什么也没发生。我从情节提要重命名了导航栏标题,但是当我运行应用程序时,标题没有设置。我真的不知道问题的根源是什么。只是出现了后退按钮。 感谢您的帮助。

【问题讨论】:

您应该能够使用情节提要向栏添加 barbuttonitem。否则,您的导航控制器已损坏。 你说的是哪个视图控制器? @Rob van der Veer:我删除了 uinavigationcontroller 并制作了一个新的,同样的问题。 @androniennn,您确定将按钮添加到的视图控制器,当您从工具栏中拖动按钮时具有完全焦点?您必须选择视图控制器,而不是视图,才能将项目拖放到导航栏。我通常双击视图控制器来确定。 @RobvanderVeer:当然被选中了。 【参考方案1】:

标签栏控制器中的每个项目都应该有一个导航控制器作为根控制器(好吧,如果你不需要它们,你就不需要它们都有一个导航控制器)。您目前拥有的是导航控制器中的标签栏控制器(除非它是模态的),因此标签栏控制器中包含的视图控制器无法看到导航控制器。

【讨论】:

啊,好吧,所以在 TabBarController 的每个控制器中我都应该有导航控制器。好的,好的。 我只是按照你的指示做了所有的事情,但是,现在我有 2 个导航栏。 删除“根”导航控制器。如果您使用 TabBarController,它应该始终是最顶层的控制器。否则,您会混淆应用程序的每个用户。 是的,如果选项卡控制器没有以模态方式呈现,那么使用“外部”导航控制器就没有什么意义了。 您可能应该用其他东西替换您的 tabBarController。在我看来,tabBar 必须位于视图层次结构的顶部。其他一切都没有多大意义,它会让你的用户感到困惑。 navigationController 总是次要于 tabBarController。我还没有看到一个(成功的)应用程序使用像你打算做的那样的层次结构。我会用一个有 3 行的 tableView 替换你的 tabBarController。或者一个有 3 页的 UIPageViewController。或带有 3 个按钮的自定义 viewController。或者在导航栏中放置一个带有 3 个段的 segmentedControl。一切,但不是 tabBar。【参考方案2】:

正如其他答案所指出的,您的 UINavigationViewController 的层次结构不正确。 UITabBarViewController 将始终是您的 UINavigationViewControllers 的父级。

对于每个作为“选项卡”的 UIViewController,您需要将您的UINavigationViewController 放在每个将具有转场的“选项卡”UIViewConrolller 的“前面”。

因此,正如其他人在此线程中指出的那样,您不需要为每个“选项卡”UIViewController 使用 UINavigationViewController,仅用于“选项卡”,这些“选项卡”将与您希望使用 UINavigationViewController 跟踪导航的其他视图相结合

层次结构可以在@App Dev Guy 的回答here中看到

在 Swift 2 中,Xcode 7 有一个非常方便的功能,可以添加 UINavigationController:

    选择用作UITabBarNavigationController 的“选项卡”的 UIViewController 在顶部 Xcode 菜单中,选择“编辑器”-> “嵌入”->

    “导航控制器”

【讨论】:

【参考方案3】:

我试图重现您的问题。

    我开始了一个新的“单一视图”项目。 选择了 iPhone 故事板 选择了视图控制器 菜单 -> 编辑器 -> 嵌入 -> 导航控制器。 打开对象浏览器 在搜索栏中输入“条形按钮项” 在导航栏上绘制条形按钮项。

完成。看看你能不能这样做。

【讨论】:

问题不在导航控制器的第一个控制器,而在TABarController的控制器。 要将项目添加到标签栏,您需要一个标签栏项目。不是栏按钮项目。 @androniennn,我现在了解您的问题,我已经复制了它,并且在标签栏控制器之后我也看不到标题或导航栏按钮。如果我将导航控制器添加到选项卡项,您会得到两个不错的导航栏。顶部栏来自父视图,第二个栏来自标签栏项目。我猜这东西是设计的。【参考方案4】:

像这样试试。这与你的做法有点不同,它对我有用:

UIBarButtonItem *button = [[UIBarButtonItem alloc] 
                           initWithTitle:@"title"                                            
                           style:UIBarButtonItemStyleBordered 
                           target:self 
                           action:@selector(showPickerView:)];
self.navigationItem.rightBarButtonItem = button;

如果您想在情节提要中执行此操作,请不要拖动“导航项”,而是拖动“条形按钮项”。

【讨论】:

不,它没有添加到 UINavigationBar :/. 你添加到哪个VC? 第二个VC(中间)。 哎呀,你复制了我的代码吗?如果是这样,我将self.navigationItem.rightBarButtonItem 错误地命名为按钮以外的其他名称。我纠正了它,只是测试了它。再试一次 您将代码放在哪里?我把它放在我的ViewDidLoad 中,它正在工作。您还说“它只是出现了后退按钮”,但是在您所说的 VC(中间那个)中应该没有后退按钮,因为它是初始 VC。

以上是关于不能用导航栏做任何事情的主要内容,如果未能解决你的问题,请参考以下文章

更改导航栏背景图像导致视图向上移动

npm start 完全没有做任何事情

如何在 iOS 7 或 6 中更改导航栏颜色?

按下后退按钮时,自动折叠移动设备上的下拉导航栏菜单

ReactJS 组件设置状态没有做任何事情?

在表格视图中点击单元格不会做任何事情