我正在开发一个具有多个嵌套UIViewControllers的应用程序。我有两个视图,一个是带有uibarbuttonitem的根视图控制器,并已连接到另一个UIViewController。
被隔离的UIViewController不接受UIButtons或UIBarButtonItems,而且我似乎无法为其设置标题。
我需要在UINavigationBar中放置标题和其他UIElement,但似乎无济于事,并且我没有在线找到任何解决方案。
UINavigationBar甚至没有出现在视图的层次结构中。
谢谢您的合作。
答案 0 :(得分:1)
您是对的。对于NavigationController堆栈中的ViewController,情节提要板的布局不一致且令人困惑。第一个提供对NavigationItem的直接访问,而后面的则不提供。我想这是因为只有一个NavigationItem,并且需要在推送和弹出ViewController时动态更新它。
处理此问题的方法是在代码中完成。按下ViewController时,其title
属性用于在导航栏上设置标题。因此,在NavigationController堆栈中的每个ViewController中,在title
中设置其viewDidLoad
:
self.title = "titleForThisVC"
对于rightBarButton
,您也可以通过编程方式将其添加。如果这是您用于按钮的@IBAction
:
@objc func handleRightBarButton() {
print("right button")
}
然后,您将像这样添加按钮(同样在viewDidLoad
中):
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Foo", style: .plain,
target: self, action: #selector(handleRightBarButton))
最后{em> gotcha 持续UITabBarController
s
如果NavigationController是UITabBarController
的子代,则选项卡栏中使用的标题将按照代码设置从堆栈中的第一个ViewController拾取标题,但仅在该选项卡之后首先被访问。为了解决这个问题,还应该在 Interface Builder
title
属性。