我想为我的UIViewController添加标题:
我试过了
self.navigationController.navigationItem.title
self.navigationController.title
self.title
有时,解决方案1工作,有时解决方案2工作,有时解决方案3工作。
任何专家能告诉我他们之间的不同吗?
答案 0 :(得分:3)
title
是UIViewController
的属性。
表示此控制器管理的视图的本地化字符串。 将标题设置为描述视图的人类可读字符串。如果 视图控制器有一个有效的导航项或标签栏项, 为此属性分配值会更新其中的标题文本 对象。
self.navigationController
是UINavigationController
,用于管理viewController
所在的viewControllers堆栈。UINavigationController
是UIViewController
的子类,因此{{1} }}是self.navigationController.title
的{{1}}。
title
:
导航项目的标题显示在导航中心 酒吧。默认值为nil。当接收器在导航时 项目堆栈,从顶部开始是第二个 - 换句话说,它的视图 controller管理用户将导航回的视图 此属性中的值用于最顶部的后退按钮 导航栏。如果此属性的值为nil,则系统使用 字符串“Back”作为后退按钮的文本。
因此,实际上,您应该设置UINavigationController
的{{1}}。如果self.navigationItem.title
由title
管理,iOS会将此标题复制到导航项或标签栏项并在导航栏上显示此标题,它将使用该文本当您推送到另一个ViewController
时,后退按钮,如果ViewController
由UINavigationController
管理,它会在标签栏中显示。
答案 1 :(得分:1)
我创建了一个演示来解释它们:
你知道,我的vc1
是黄色 - 灰色color
嵌入navigation controller
,我的vc2
是浅绿色color
嵌入navigation controller
1}},这两个navigation controller
全部由tabbar controller
管理。
在ViewController.swift
(vc1
)中,如果我设置了self.title
:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "vc1's title"
}
}
在ViewController2.swift
(vc2
)中:
import UIKit
class ViewController2: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "vc2's title"
}
}
结果是tabbar title
和navigation title
全部设置:
如果我设置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
已设置:
如果我设置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
已设置: