【问题标题】: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 有效。

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

【问题讨论】:

    标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem


    【解决方案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了吗?
      • 我知道它可以作为你的演示,我想知道它的根本原因,然后我可以决定在我未来的开发中使用哪一个。
      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2020-02-24
      • 2016-02-18
      • 1970-01-01
      相关资源
      最近更新 更多