1

我想標題添加到我的UIViewController:標題有什麼不同?

我已經試過

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

有時候,解決方案1組的工作,有時解決方案2的工作,有時解決方案3級的作品。

任何專家都可以告訴我他們之間的不同嗎?

回答

3

titleUIViewController的財產。

表示此控制器管理的視圖的本地化字符串。 將標題設置爲描述視圖的人類可讀字符串。如果 視圖控制器具有有效的導航項目或標籤欄項目, 將值分配給此屬性將更新這些 對象中的標題文本。


self.navigationController是管理viewControllers您viewController在堆棧中的UINavigationControllerUINavigationControllerUIViewController子類,因此self.navigationController.titleUINavigationControllertitle


self.navigationItem.title:在導航欄 的中央顯示

的導航項目的冠軍。默認值是零。當接收器在導航 項目堆棧上並且從頂部開始第二個,換句話說,其視圖 控制器管理用戶將導航回到的視圖 - 該屬性中的 值用於最頂端的 導航欄。如果此屬性的值爲零,則系統使用 字符串「返回」作爲後退按鈕的文本。


因此,在實踐中,你應該設置你的ViewController S的title。 iOS版將這個標題複製到導航項目或標籤欄項目,如果你ViewControllerUINavigationController管理上導航欄顯示此標題,當你推到另一個ViewController它將使用該文本爲後退按鈕,如果您的ViewControllerUITabBarController管理,它將顯示在標籤欄中。

1

我創建了一個演示,以解釋它們:

enter image description here

你看,我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所有組:

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

+0

你嘗試self.navigationController.navigationItem.title? – Kevin

+0

我知道它可以用作演示,我想知道這個的根本原因,然後我可以決定在未來的開發中使用哪一個。 – Kevin

相關問題