以编程方式更改导航标题

224

我有一个带标题的导航栏。 当我双击文本以重命名时,它实际上说它是一个导航项,所以可能是那个。

我正在尝试使用代码更改文本,例如:

declare navigation bar as navagationbar here
button stuff {
    navigationbar.text = "title"
}

显然那不是我的代码,只是展示它如何工作。

所以无论何时我按下按钮,我都希望标题改变。

18个回答

617
你可以通过改变正在显示的视图控制器的 标题 来更改标题。
viewController.title = "some title"

通常这是在视图控制器的viewDidLoad方法中完成:

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "some title"
}

但是,这仅适用于您的视图控制器嵌入了UINavigationController中。我强烈建议您这样做,而不是自己创建导航栏。如果您坚持要自己创建导航栏,可以通过执行以下操作更改标题:

navigationBar.topItem.title = "some title"

1
ViewController 类型没有成员名称为 title。这是我得到的错误。 - Rising
3
不要直接在类上调用它,而是在UIViewController子类的实例上调用它。 - drewag
在Xcode中也能够完美运行...只需要做一个小改变 -> self.title = @"一些标题"; - Abstract
3
警告:self.title = "some title"将同时更改导航栏标题和选项卡项目标题。 - RemyDCF
@drewag,你能帮我解决一下这个问题吗?https://stackoverflow.com/questions/44304498/how-to-set-font-family-to-uiviewcontroller-title-in-swift? - May Phyu
显示剩余9条评论

83

请在viewDidLoad中尝试以下内容

self.navigationItem.title = "Your Title"

1
为我工作。iOS 11.4 - Antony Wong

21

以下代码在我的 Xcode 7 上运行良好:

override func viewDidLoad() {        
    super.viewDidLoad()
    self.navigationItem.title = "Your Title"
}

13

我发现以下方法可行:

navigationItem.title = "Title"

如何将导航控制器的子视图控制器中的标题居中显示?由于某些原因,文本被左对齐。var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "一些标题" - bibscy

10

Swift 5.1

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "What ever you want"
}

7
如果您在TabBarController内嵌了一个NavigationController,请参见下面的内容:
super.tabBarController?.title = "foobar"

enter image description here

你可以使用调试器脚本来调试此类问题。尝试使用Chiselpvc命令打印层次结构中的每个可见/隐藏视图。

6

对于使用的人来说,正确答案是

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Your Text"
}

6

如果你想手动创建导航栏,以下代码可以帮助你:

func setNavBarToTheView() {
    let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 64.0))
    self.view.addSubview(navBar);
    let navItem = UINavigationItem(title: "Camera");
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self, action: #selector(CameraViewController.onClickBack));
    navItem.leftBarButtonItem = doneItem;
    navBar.setItems([navItem], animated: true);
}

5
通常最佳实践是在UIViewController上设置标题。这样做也会设置UINavigationItem。一般来说,这比以编程方式分配和初始化未链接到任何内容的UINavigationBar要好。
您会错过一些UINavigationBar设计的好处和功能。这里是一个链接,可以帮助您了解不同属性在实际栏和UINavigationItem上设置的情况。
只需记住:
  1. 您将失去返回按钮功能(除非自己连接)
  2. 内置的“从左侧拖动以向后滑动”的手势被放弃了
UINavigationController是您的朋友。

5
如果您想更改嵌入在导航控制器中的页面视图控制器的子视图控制器的标题,代码如下:
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.parent?.title = "some title"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接