Ios 在情节提要下添加导航项
我有一个使用选项卡栏的项目。选项卡栏中的所有选项卡都具有相同的主导航控制器。在其中一个视图上,我希望有用户可以使用的自定义按钮 我在将这些按钮添加到情节提要并显示它们时遇到问题:Ios 在情节提要下添加导航项,ios,objective-c,storyboard,uibarbuttonitem,Ios,Objective C,Storyboard,Uibarbuttonitem,我有一个使用选项卡栏的项目。选项卡栏中的所有选项卡都具有相同的主导航控制器。在其中一个视图上,我希望有用户可以使用的自定义按钮 我在将这些按钮添加到情节提要并显示它们时遇到问题: 以编程方式添加它们 我的项目是用Objective-C编写的,因此我尝试通过编程方式将它们添加到我的viewController中: self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemIte
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
action:@selector(myFriendsView)];
我还尝试使用以下方法添加它们:
self.navigationController.navigationItem.rightBarButton = ...
因为最初的方法不起作用。我不知道是否需要指向选项卡栏导航控制器的指针来添加按钮。这两种方法都不起作用
如果有人能就如何使用故事板以及如何在使用选项卡栏时向视图控制器添加导航按钮向我提供建议,我将不胜感激。非常感谢@matt帮助我思考这个问题 这是一个有趣的案例,我需要更仔细地思考到底发生了什么才能找到答案——在这个案例中,我需要在评论中得到一些帮助 问题是我没有将导航项设置在正确的位置。我的应用程序的框架设置如下:
tabBarController -> viewController -> navigationBar
我最初的方法是尝试在viewController上设置导航项。正如您在上面的框架中看到的,没有要设置的导航项。这就是self.navigationController无法工作的原因
接下来,我尝试在中添加navigationController以解决此问题:
tabBarController -> navigationController -> viewController -> navigationBar
这也不起作用,因为导航栏是首先在tabBarController中设置的,因此navigationController不会覆盖它
这一步是我逻辑上的漏洞。我假设我的代码/故事板有问题,因为导航控制器和我设置的项目没有出现
问题是我不理解这个问题。在本例中,我们有一个控制tabBar的tabBar控制器。这将控制导航栏。这意味着如果我想访问它,我需要为我们的父视图获取当前的导航控制器。使用self.tabBarController可以轻松完成此操作:
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
action:@selector(myFriendsView)];
解决方案:
self.tabBarController.navigationItem.rightBarButtonItem = ...;
如你所见,这与我在上述问题中的尝试非常相似。两者都遵循导航项的约定。不同之处在于,在解决方案中,我访问了整个视图的父导航控制器。“选项卡栏中的所有选项卡都具有相同的主导航控制器”好的,我们只讨论了问题的第二句话,这已经没有意义了。我想你是说这是一个带有多个子视图控制器的选项卡栏控制器?但是,他们怎么可能都有“相同的导航控制器”?马特,我们有一个主导航控制器,它加载一个视图控制器,它是一个UITABBARC控制器。当我说“它们都有相同的导航控制器”时,我的意思是每个视图没有在情节提要中添加自己的导航控制器。相反,我们将ViewController加载到UITabBar中。我假设这意味着它们共享同一个导航控制器。如果我理解正确,这意味着导航控制器中有一个选项卡栏控制器。这意味着导航控制器只有一个子控制器“共享”它,即选项卡栏控制器。对于导航控制器的状态,不会咨询选项卡栏的子项。这就是为什么您尝试执行的操作不起作用的原因。选项卡栏控制器的子项不在导航界面中(即使它们的祖父是导航控制器)。选项卡栏控制器为。从一个视图控制器切换到另一个视图控制器不会对导航控制器、其导航栏等产生任何影响。我不知道您做了什么使其“工作”,因此您应该承担责任并回答您自己的问题!(完全合法的堆栈溢出;几天后,您甚至可以接受自己的答案。)