bar ios uinavigationcontroller uinavigationitem

ios - navigation bar swift 4



navigationController.navigationItem vs navigationItem (2)

Solo por curiosidad, ¿por qué configurar self.navigationItem = ... funciona, pero self.navigationController.navigationItem falla? Lo mismo se aplica a self.toolbarItems vs self.navigationController.toobarItems .

¿Cuándo usar self.navigationController.navigationItem ?

Tal vez usted dirá, apuntan a cosas diferentes. pero ¿ self.navigationController.navigationBarHidden = YES qué self.navigationController.navigationBarHidden = YES la barra de navegación está oculta? no significa self.navigationController.navigationItem apunta a la barra que quería?


La clase UIViewController tiene una propiedad navigationItem .

Esto también se UICollectionViewController todas las subclases, ya se trate de un UICollectionViewController , UITableViewController , UINavigationViewController o cualquier subclase personalizada.

Cuando lo presenta un controlador UINavigationController el controlador de navegación creará esta propiedad, por lo que cada controlador de vista obtiene su propio elemento de navigationItem . Si no lo presenta desde un controlador de navegación, el elemento de navegación es nulo.

Ahora, con un UINavigationController es más que probable que UINavigationController esto como tu controlador de vista inicial. Por lo tanto, el controlador de navegación NO está siendo presentado por otro controlador de navegación y su propiedad de elemento de navigationItem es nula.

La barra de navegación es ligeramente diferente, ya que esto se maneja al revés.


aunque set puede establecer esta propiedad de un controlador de navegación: self.navigationController.navigationItem = .. pero no funcionará. Principalmente porque el elemento de navegación es una propiedad de UIViewController. Puede acceder a la propiedad porque UINavigationController se hereda de UIViewController. esta propiedad está diseñada para que cualquier controlador de vista que se agregue a un controlador de navegación tenga una barra de navegación creada para ellos. Normalmente, un UINavigationController no se colocará en otro controlador de navegación, por lo que establecer esta propiedad de un controlador de navegación normalmente no tiene sentido.