【发布时间】:2017-03-14 23:05:43
【问题描述】:
我有一个使用标签栏的项目。标签栏中的所有标签都有相同的主导航控制器。在其中一个视图上,我希望有用户可以使用的自定义按钮。
我在将这些按钮添加到情节提要并显示它们时遇到问题:
- 以编程方式添加它们
我的项目是用 Objective-C 编写的,所以我尝试以编程方式将它们添加到我的 viewController:
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
action:@selector(myFriendsView)];
我还尝试使用以下方法添加它们:
self.navigationController.navigationItem.rightBarButton = ...
由于初始方法不起作用。我不知道是否需要指向标签栏导航控制器的指针来添加按钮。这两种方法都不起作用。
- 在情节提要中添加按钮
我在情节提要中的 viewController 中添加了一个导航项,然后将我的按钮拖到其中。你可以看到下面的截图:
这种技术的问题是当我加载代码时按钮没有出现。我再次认为这可能与 UITabBar 导航控制器覆盖故事板有关。
- 向情节提要添加导航控制器以加载 viewController
接下来我尝试添加 UINavigationController,然后将我的 viewController 作为根视图加载。根视图仍然包含导航项和按钮。
这是似乎对我所追求的功能产生任何影响的第一种方法。奇怪的是,导航项被添加到导航栏下方:
如您所见,它在导航栏下方而不是在其中添加了导航项。此功能按预期工作,只是按钮位置错误。
- 我尝试过的其他方法:
-将 UIBarbuttonItems 拖到故事板中的导航控制器导航栏中
结论: 对我来说,这似乎应该是用故事板轻松实现的事情。我不明白是什么导致此代码无法正常工作,以及为什么 Apple 会启用在导航栏下添加导航项的功能,而无需我将导航栏添加到情节提要的同一视图中。
如果有人能给我关于使用故事板的建议,以及在使用标签栏时如何将导航按钮添加到视图控制器,将不胜感激。
【问题讨论】:
-
"标签栏中的所有标签都有相同的主导航控制器" 好的,我们只讨论问题的第二句话,这已经没有意义了。我认为您的意思是这是一个带有多个子视图控制器的标签栏 controller?但是他们怎么可能都有“相同的导航控制器”呢?
-
@matt 我们有一个主导航控制器,它加载一个视图控制器,它是一个 UITabBarController。当我说“它们都有相同的导航控制器”时,我的意思是每个视图都没有在情节提要中添加自己的导航控制器。相反,我们将 viewControllers 加载到 UITabBar 中。我认为这意味着它们都共享相同的导航控制器。
-
如果我理解正确,这意味着您在导航控制器中有一个标签栏控制器。这意味着导航控制器只有 一个 子“共享”它,即标签栏控制器。导航控制器的状态不会咨询标签栏的子级。
-
这就是为什么您尝试做的事情不起作用的原因。标签栏控制器的孩子不在导航界面中(即使他们的祖父是导航控制器)。标签栏控制器是。从一个视图控制器切换到另一个视图控制器不会对导航控制器、导航栏等产生任何影响。
-
我不知道你做了什么让它“工作”,所以你应该相信并回答你自己的问题! (在 Stack Overflow 上完全合法;几天后您甚至可以接受自己的答案。)
标签: ios objective-c storyboard uibarbuttonitem