以编程方式更改导航标题


187

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

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

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

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

因此,每当我按下按钮时,我都希望标题更改。

Answers:


537

您可以通过更改显示的视图控制器的标题来更改标题

viewController.title = "some title"

通常,这是在视图控制器上加载视图时完成的:

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

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

navigationBar.topItem.title = "some title"

1
ViewController.type没有名为title的成员。那就是我得到的错误。
2014年

2
您不会在课堂上直接调用它。您可以在UIViewController子类的实例上调用它
drewag

是的,ViewController指的是班级本身。你需要参考的实例ViewController。可以在类的方法中viewDidLoad使用self。如果您不知道类和实例之间的区别,强烈建议您学习它的含义。本文将有所帮助。
drewag

在Xcode中也像魅力一样工作。..只是一个小小的改动-> self.title = @“ some title”;
摘要

self.title =“某些标题”对我有用。谢谢 !我一直在尝试'navigationController?.navigationItem.title =“某些标题”。真的不确定为什么它不起作用。(除了嵌入式导航控制器之外,我在那里确实有一个导航项,该导航项用于显示标题)。我仍然认为它应该工作,但不知道为什么。堆栈溢出再次救援!
内斯塔(Naishta),


13

以下代码适用于Xcode 7:

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

10

我发现这可行:

navigationItem.title = "Title"

如何将标题居中于UINavigationController的子级的视图控制器中?由于某种原因,文本向左对齐。 var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy

5

而且,如果您尝试Navigation Bar手动创建此代码,也会对您有所帮助

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);
}

4

通常,最佳做法是在上设置标题UIViewController。通过这样做,UINavigationItem还设置了。通常,这比以编程方式分配和初始化UINavigationBar未链接任何对象的a更好。

您会错过UINavigationBar为其设计的一些好处和功能。这是可能会帮助您的文档的链接。它讨论了可以在实际条形图和上设置的不同属性UINavigationItem

请记住:

  1. 您将失去后退按钮功能(除非您自己连接)
  2. 内置的“从左侧拖动以向后滑动”手势被取消

UINavigationController是您的朋友。


4

使用人的正确答案 将是

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

3

迅捷3

我为情节提要中的导航栏(来自对象浏览器)随附的导航标题栏项目创建了一个出口。然后,我起诉了以下行:

navigationBarTitleItem.title = "Hello Bar"

2

如果要从导航控制器中嵌入的页面视图控制器的子视图控制器更改标题,则如下所示:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.parent?.title = "some title"
}

1

如果您有NavigationController嵌入的内容,TabBarController请参见以下内容:

super.tabBarController?.title = "foobar"

在此处输入图片说明

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


0

在Swift 4中:

斯威夫特4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

希望对您有所帮助!


2
这只是已接受答案的一半。另外,如果您说什么都没有改变,那为什么还要发布任何东西呢?请删除。
埃里克·艾雅

@Moritz您是主持人还是类似的人?如果回答“是”,我将其删除;否则,我不会将其删除。
Radames E. Hernandez,

1
你真的说吗?,在我上面有4个完全相等的答案,那你为什么要跟我来并告诉我抹去我的?我是支持社区的值得信赖的用户,我不会仅仅重复回答。我只是想用更新的快速版本来更新这个问题。
Radames E. Hernandez

3
您的答案没有更新。这是与接受的答案相同的代码,“通常是在加载时完成的”部分……
Eric Aya

0

我更喜欢使用self.navigationItem.title = "Your Title Here"self.title = "Your Title Here"在导航栏提供标题,因为标签栏也使用self.title来改变它的标题。您应该一次尝试以下代码。

注意:在执行任何操作之前,必须调用超级视图生命周期。

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupNavBar()
    }
}

private func setupNavBar() {
    self.navigationItem.title = "Your Title Here"
}

0

迅捷5.1

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

0

迅捷5.1

//以编程方式和动态方式设置NavigationBar标题

注意: 首先将NavigationControllerItem添加到Your中,ViewController然后转到其ViewController.swift文件,然后将其复制并粘贴到中viewDidLoad()

navigationItem.title = "Your Title Here"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.