Xcode/Storyboard:无法将工具栏按钮拖动到顶部的工具栏。

101

我有一个视图控制器,它是表的详细视图。当你点击表的行时,它会带你去到详细视图。详细视图嵌入了导航控制器中,这样就有一个按钮位于导航栏的左上角可以将你带回表格。到目前为止都很好。

现在我想在导航栏的右侧添加一个编辑按钮,以便您可以编辑详细视图。我的计划是这将以模态方式添加另一个视图控制器,让您编辑项目的详细信息。标准操作。

但是,当我尝试从对象列表中拖动一个条形按钮项目到导航栏时,它不起作用。相反,当我松开鼠标按钮时,它会将该按钮留在底部的标签栏控制器上。(我的导航方案包括不同的选项卡和每个选项卡的表、详细视图等.)

有人遇到过这种情况,并能够建议我做错了什么或提供一些解决方法来将该条形按钮项目添加到导航屏幕的右侧吗?我是否必须在代码中添加它?

感谢任何建议。


请查看以下教程:http://brianflove.com/2012/10/01/uitoolbar-for-simple-and-easy-toolbars-in-ios/ - casillas
我能够使用self.navigationItem.rightBarButtonItem = self.editButtonItem;添加按钮,并在storyboard中创建了新的editvc,但是不确定如何创建segue。无法在storyboard中完成,因为编辑按钮不可见,所以我猜必须在代码中完成。我会尝试prepareforsegue吗? - user1904273
如果其中一个答案对您有帮助,您应该接受它 :) - user4151918
20个回答

158

我在使用Xcode6时遇到了相同的问题,我注意到当您将第一个ViewController嵌入NavigationController时,UINavigationItem会自动添加,但对于随后的ViewControllers,您将需要手动添加它如下:

  1. 在对象库中找到 Navigation Item ,然后将其拖到故事板中的第二个ViewController中。
  2. 在对象库中找到 Bar Button Item ,然后将其拖到您在上一步中创建的导航项中。

现在,您将拥有固定在场景顶部的Bar Buttons。

更新 该解决方案仍适用于XCode 7,但我想添加更多描述性照片。以防任何人不太熟悉上述标准或技术名称。请注意右侧红色箭头,它们是指上述步骤1、步骤2。还请注意左侧红色矩形中视图的层次结构。 输入图片说明


2
是的,对我来说就是这样。我认为这是正确的答案,XCode似乎不会将导航项添加到后续的ViewControllers中。 - Jeremy Chone
这是正确的,但图像中的红色箭头应该从对象库中的“条形按钮项”一直指向左侧的红色框。 - malhal
你可以将它拖到画布上,如红箭头所示,也可以像你建议的那样将它放置在文档大纲中。这并不会有任何影响。 - Wael Showair
我非常高兴找到了这个答案,因为它非常有效--但我很困惑为什么Storyboard上没有UINavigationItem?显然在运行时它是存在的,因为代码self.navigationItem.rightBarButtonItem = ...可以工作。我猜测第一个VC上的UINavigationController会为所有后续推入堆栈的VC实例化它。然而,通过手动拖动一个到那里,为什么你不会得到两个重叠的UINavigationItems呢?一个是你手动拖动的,另一个是从UINavigationController中已经存在的。 - James Toomey

70

恶毒的技巧:

  1. 将你的segue更改为push。
  2. 设置所需内容。
  3. 再次设置为show。

然后,内容就可以被编辑,并且你将拥有一个非过时的segue样式。


这个看起来很丑,但在 Xcode 7.3 中对于视图控制器中的 UIBarButtonItem 是有效的。 - mikeho
哦我的天,它在XCode 8.2.1中仍然可以工作。何时会修复呢?也许永远不会。 - Dmytro Rostopira
这是我找到的唯一方法,而不需要通过代码添加它。 - Joshua

33
你的故事板视图控制器可能缺少一个导航项。你可以从对象库中拖动一个,并将其放置在你的视图控制器上。
然后,你就可以将工具栏按钮项目拖放到导航栏的左侧或右侧。

1
这个方法可以运行,但我感觉以前只要有推进segue到控制器就自动完成了。 - aryaxt
这应该是正确的答案。其他的看起来对我来说都是hack。 - MK Yung

23

我解决了。将“导航项”拖入您的详细视图中,然后您就可以拖入“栏按钮项目”。


8
我解决这个问题的方法是,不再将UINavigationController拖到Storyboard中并尝试添加UIBarButtonItems。而是将UITableViewController拖入,然后转到 编辑器->嵌入->导航控制器 ,这会得到与之前相同的结果,但我现在可以自由地向导航栏的两侧添加UIBarButtonItems,没有任何问题。

你应该向上走! - Vin

5

实际上这是Xcode的问题。 一个技巧是在左侧的“VIEW FILE STRUCTURE”中添加工具栏按钮,而不是直接添加到视图中。 希望能对你有所帮助。 :)


这个可行!我猜这就是解决方案,只要苹果修复了Xcode 8.2的错误。 - Arjun Kalidas

5

我认为这是一个bug。我曾经遇到过相同的问题。我通过禁用大小类,然后启用它来解决了这个问题。

您可以在Interface Builder文档中禁用和启用大小类。

enter image description here


4
我也遇到过这个问题,关闭并重新打开项目对我有用。

3

我认为这是 XCode 的一个小问题。我曾经遇到过同样的问题。我不得不重置 Xcode 并调整 storyboard 上的内容位置,最终才能让它正常工作。现在它已经可以使用了。


3

我认为这是Xcode的一个bug。在Xcode 8中,先将选项卡栏视图控制器之前的segue更改为其所有选项(show detailpresent等)。然后再切换回show。尝试拖动条形按钮并修改标题。这对我起作用了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接