头衔有啥不同?

Posted

技术标签:

【中文标题】头衔有啥不同?【英文标题】:What's the different with titles?头衔有什么不同? 【发布时间】:2016-12-18 12:39:02 【问题描述】:

我想给我的 UIViewController 添加标题:

我试过了

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

有时,解决方案 1 有效,有时解决方案 2 有效,有时解决方案 3 有效。

哪位专家能告诉我它们之间的区别吗?

【问题讨论】:

【参考方案1】:

titleUIViewController 的属性。

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


self.navigationController 是一个UINavigationController,它管理您的viewController 所在的viewController 堆栈。UINavigationControllerUIViewController 的子类,所以self.navigationController.titleUINavigationControllertitle .


self.navigationItem.title:

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


因此,在实践中,您应该设置ViewControllers 的title。如果您的ViewControllerUINavigationController 管理,ios 会将此标题复制到导航项或标签栏项并在导航栏 上显示此标题,它会将该文本用于返回按钮当您推送到另一个ViewController 时,如果您的ViewControllerUITabBarController 管理,它将显示在标签栏中。

【讨论】:

【参考方案2】:

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

你看,我的vc1是黄灰色的color嵌入navigation controller,我的vc2是浅绿色color也嵌入了navigation controller,两个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 titlenavigation 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被设置:

【讨论】:

你试过self.navigationController.navigationItem.title了吗? 我知道它可以作为你的演示,我想知道它的根本原因,然后我可以决定在我未来的开发中使用哪一个。

以上是关于头衔有啥不同?的主要内容,如果未能解决你的问题,请参考以下文章

构建软件 DAW 需要哪些开发人员角色或头衔?

PostgreSQL 中不同语言的性能/兼容性有啥不同吗?

QRemoteObjectRegistryHost 和 QRemoteObjectHost 有啥不同?

read()与readLine()有啥不同; write()与writeLine()有啥不同

C++ 类中的两个不同变量初始化。有啥不同?

SizetoFit 与 UIViewAutoresizingFlexibleHeight。有啥不同?