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.