故事板下添加的导航项

Navigation item added under storyboard

我有一个使用标签栏的项目。标签栏中的所有标签都有相同的主导航控制器。在其中一个视图中,我想拥有用户可以使用的自定义按钮。

我在将这些按钮添加到故事板并显示它们时遇到问题:

  1. 以编程方式添加它们

我的项目是用 Objective-C 编写的,所以我尝试以编程方式将它们添加到我的 viewController:

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

我还尝试使用以下方法添加它们:

self.navigationController.navigationItem.rightBarButton = ...

因为最初的方法没有用。我不知道我是否需要指向标签栏导航控制器的指针来添加按钮。这些方法都不起作用。

  1. 在故事板中添加按钮

我在情节提要中的 viewController 添加了一个导航项,然后将我的按钮拖入其中。您可以在下面查看屏幕截图:

此技术的问题是当我加载代码时按钮没有出现。我再次认为这可能与 UITabBar 导航控制器覆盖故事板有关。

  1. 将导航控制器添加到故事板以加载 viewController

接下来我尝试添加一个 UINavigationController,然后将我的 viewController 加载为根视图。根视图仍然包含导航项和按钮。

这是第一个似乎对我想要的功能有任何影响的方法。奇怪的是在导航栏下方添加了导航项:

如您所见,它在导航栏下方而不是内部添加了导航项。除了按钮位置错误外,此功能按预期工作。

  1. 我尝试过的其他事情:

-将 UIBarbuttonItems 拖到情节提要中的导航控制器导航栏中

结论: 对我来说,这似乎应该是用故事板实现的一件容易的事情。我不明白是什么导致此代码无法正常工作,以及为什么 Apple 会启用在导航栏下添加导航项的功能,而无需我将导航栏添加到情节提要中的同一视图中。

如果有人能给我关于使用故事板以及如何在使用标签栏时向视图控制器添加导航按钮的建议,我将不胜感激。

非常感谢@matt 帮助我思考这个问题。

这是一个有趣的案例,我需要更加认真地思考实际发生的事情才能找到答案 - 在这种情况下需要评论中的一些帮助。

问题是我没有在正确的位置设置导航项。我的应用程序的框架设置如下:

tabBarController -> viewController -> navigationBar

我最初的方法是尝试在 viewController 上设置导航项。正如您在上面的框架中看到的,没有要设置的导航项。这就是 self.navigationController 不工作的原因。

接下来我尝试添加一个 navigationController 来解决这个问题:

tabBarController -> navigationController -> viewController -> navigationBar

这也不起作用,因为首先在 tabBarController 中设置了导航栏,因此 navigationController 不会覆盖它。

这一步是我逻辑上的漏洞。我假设我的 code/storyboard 某处有问题,因为我设置的导航控制器和项目没有出现。

问题是我没有理解这个问题。在这种情况下,我们有控制 tabBar 的 tabBarController。这控制导航栏。这意味着如果我想访问它,我需要为我们的父视图获取当前的导航控制器。使用 self.tabBarController:

很容易做到这一点

解决方法:

self.tabBarController.navigationItem.rightBarButtonItem = ...;

如您所见,这与我在上述问题中的尝试非常相似。两者都遵循导航项的约定。不同之处在于,在解决方案中,我访问了整个视图的父级 navigationController。