1

Я хотел бы добавить заголовок к моему UIViewController:В чем разница с названиями?

Я попытался

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

Иногда раствор 1 работа, иногда решение 2 работы, иногда решение 3 работ.

Может ли какой-либо эксперт рассказать мне разные между ними?

ответ

3

title является собственностью компании UIViewController.

Локализованная строка, представляющая представление, которым управляет этот контроллер. Установите заголовок для строки, читаемой человеком, которая описывает представление. Если контроллер представления имеет действительный элемент навигации или элемент табуляции, присвоение значения этому свойству обновляет текст заголовка в тех объектах .


self.navigationController является UINavigationController, который управляет стек viewControllers, что ваш viewController находится в. UINavigationController является подклассом UIViewController, так self.navigationController.title является title из UINavigationController.


self.navigationItem.title:

Заголовок навигационного элемента отображается в центре навигационного бара. Значение по умолчанию равно nil. Когда приемник находится в навигационной таблице и является вторым с вершины - другими словами, его вид контроллер управляет представлениями, которые пользователь будет перемещать назад, - значение в этом свойстве используется для кнопки «Назад» на самый верх панель навигации. Если значение этого свойства равно nil, система использует строку «Назад» в качестве текста кнопки «Назад».


Таким образом, на практике, вы должны установить title ваших ViewController с. IOS будет скопировать этот заголовок пункт навигационной панели пункта или вкладки и отобразить это название на Navigation Bar если ваш ViewController управляются UINavigationController, он будет использовать этот текст для кнопки Назад когда вы нажимаете на другую ViewController, и он отобразит его на панели вкладок, если ваш ViewController управляется UITabBarController.

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 title и navigation 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