在故事板

时间:2017-03-14 23:05:43

标签: ios objective-c storyboard uibarbuttonitem

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

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

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

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

    我还尝试使用以下内容添加它们:

    self.navigationController.navigationItem.rightBarButton = ...
    

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

    1. 在故事板中添加按钮
    2. 我在故事板中向我的viewController添加了一个导航项,然后将我的按钮拖入其中。您可以在下面看到截图:

      enter image description here

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

      1. 向故事板添加导航控制器以加载viewController
      2. 我接下来尝试添加一个UINavigationController,然后加载我的viewController作为根视图。根视图仍包含导航项和按钮。

        enter image description here

        这是第一种似乎对我所追求的功能有任何影响的方法。奇怪的是导航项添加在导航栏下方:

        enter image description here

        正如您所看到的,它已在导航栏下方而不是在其中添加了导航项。除了按钮位于错误的位置之外,此功能可以正常工作。

        1. 我尝试过的其他事情:
        2. - 将UIBarbuttonItems拖放到故事板中的导航控制器导航栏中

          结论: 对我来说,这似乎是一个简单的事情来实现故事板。我无法理解导致此代码无法正常工作的原因以及为什么Apple会启用在导航栏下添加导航项的功能,而无需在故事板的同一视图中添加导航栏。

          如果有人可以就使用故事板提供建议,以及在使用非常感谢的标签栏时如何向视图控制器添加导航按钮。

1 个答案:

答案 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。