标题的不同之处是什么?

时间:2016-12-18 12:39:03

标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem

我想为我的UIViewController添加标题:

我试过了

self.navigationController.navigationItem.title
self.navigationController.title
self.title

有时,解决方案1工作,有时解决方案2工作,有时解决方案3工作。

任何专家能告诉我他们之间的不同吗?

2 个答案:

答案 0 :(得分:3)

titleUIViewController的属性。

  

表示此控制器管理的视图的本地化字符串。   将标题设置为描述视图的人类可读字符串。如果   视图控制器有一个有效的导航项或标签栏项,   为此属性分配值会更新其中的标题文本   对象。

self.navigationControllerUINavigationController,用于管理viewController所在的viewControllers堆栈。UINavigationControllerUIViewController的子类,因此{{1} }}是self.navigationController.title的{​​{1}}。

title

  

导航项目的标题显示在导航中心   酒吧。默认值为nil。当接收器在导航时   项目堆栈,从顶部开始是第二个 - 换句话说,它的视图   controller管理用户将导航回的视图   此属性中的值用于最顶部的后退按钮   导航栏。如果此属性的值为nil,则系统使用   字符串“Back”作为后退按钮的文本。

因此,实际上,您应该设置UINavigationController的{​​{1}}。如果self.navigationItem.titletitle管理,iOS会将此标题复制到导航项或标签栏项并在导航栏上显示此标题,它将使用该文本当您推送到另一个ViewController时,后退按钮,如果ViewControllerUINavigationController管理,它会在标签栏中显示。

答案 1 :(得分:1)

我创建了一个演示来解释它们:

enter image description here

你知道,我的vc1是黄色 - 灰色color嵌入navigation controller,我的vc2是浅绿色color嵌入navigation controller 1}},这两个navigation controller全部由tabbar controller管理。

ViewController.swiftvc1)中,如果我设置了self.title

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "vc1's title"  
    }

}

ViewController2.swiftvc2)中:

import UIKit

class ViewController2: UIViewController {

       override func viewDidLoad() {
        super.viewDidLoad()

        self.title = "vc2's title"
    }

}

结果是tabbar titlenavigation title全部设置:

  

enter image description here

如果我设置self.navigationController?.title

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // self.title = "vc1's title"

        self.navigationController?.title = "vc1's nav title"

    }
}

结果是tabbar title已设置:

  

the result

如果我设置self.navigationItem.title

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // self.title = "vc1's title"

        //self.navigationController?.title = "vc1's nav title"

        self.navigationItem.title = "vc1's navItem title"
    }
}

结果是navigation title已设置:

  

enter image description here