我有一个使用标签栏的项目。选项卡栏中的所有选项卡都具有相同的主导航控制器。在其中一个视图中,我想要有用户可以使用的自定义按钮。
我在向故事板添加这些按钮并显示它们时遇到问题:
我的项目是用Objective-C编写的,所以我尝试以编程方式将它们添加到我的viewController:
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
action:@selector(myFriendsView)];
我还尝试使用以下内容添加它们:
self.navigationController.navigationItem.rightBarButton = ...
由于最初的方法不起作用。我不知道是否需要指向标签栏导航控制器的指针来添加按钮。这些方法都不奏效。
我在故事板中向我的viewController添加了一个导航项,然后将我的按钮拖入其中。您可以在下面看到截图:
这种技术的问题在于,当我加载代码时按钮没有出现。我再一次认为这可能与UITabBar导航控制器覆盖故事板有关。
我接下来尝试添加一个UINavigationController,然后加载我的viewController作为根视图。根视图仍包含导航项和按钮。
这是第一种似乎对我所追求的功能有任何影响的方法。奇怪的是导航项添加在导航栏下方:
正如您所看到的,它已在导航栏下方而不是在其中添加了导航项。除了按钮位于错误的位置之外,此功能可以正常工作。
- 将UIBarbuttonItems拖放到故事板中的导航控制器导航栏中
结论: 对我来说,这似乎是一个简单的事情来实现故事板。我无法理解导致此代码无法正常工作的原因以及为什么Apple会启用在导航栏下添加导航项的功能,而无需在故事板的同一视图中添加导航栏。
如果有人可以就使用故事板提供建议,以及在使用非常感谢的标签栏时如何向视图控制器添加导航按钮。
答案 0 :(得分:0)
非常感谢@matt帮助我思考这个问题。
这是一个有趣的案例,我需要更加努力地思考实际发生的事情才能找到答案 - 在这种情况下需要在评论中提供一些帮助。
问题在于我没有将导航项目设置在正确的位置。我的应用程序框架设置如下:
tabBarController -> viewController -> navigationBar
我最初的方法是尝试在viewController上设置导航项。正如您在上面的框架中看到的那样,没有要设置的导航项。这就是self.navigationController没有工作的原因。
接下来,我尝试添加一个navigationController来解决这个问题:
tabBarController -> navigationController -> viewController -> navigationBar
由于导航栏首先在tabBarController中设置,因此导航栏无法正常工作,因此navigationController不会覆盖它。
这一步是我逻辑中的漏洞。我假设我的代码/故事板出了问题,因为导航控制器和我设置的项目都没有出现。
问题在于我没有理解这个问题。在这种情况下,我们有tabBarController来控制tabBar。这可以控制导航栏。这意味着如果我想访问它,我需要获取父视图的当前导航控制器。使用self.tabBarController:
可以轻松完成此操作解决方案:
self.tabBarController.navigationItem.rightBarButtonItem = ...;
正如您所看到的,这与我在上述问题中的尝试非常相似。两者都遵循导航项的惯例。不同之处在于我在解决方案中访问了整个视图的父navigationController。