2012-06-25 12 views
5

¿Cuál es la diferencia entre self.navigationController.navigationItem y self.navigationItem? Estoy usando un UINavigationController en toda la aplicación y cuando uso self.navigationController.navigationItem.rightBarButtonItems, en uno de los métodos viewDidLoad de uno de los viewControllers, la matriz está vacía. Sin embargo, si utilizo self.navigationItem.rightBarButtonItems, veo mis elementos de botón de barra. ¿Cuál es la diferencia entre las dos llamadas? ¡Gracias!Diferencia entre self.navigationController.navigationItem y self.navigationItem

Respuesta

5

A UINavigationController es una subclase de UIViewController. Como tal, tiene su propia propiedad independiente navigationItem, que heredó de UIViewController. Debe ignorar esta propiedad, ya que solo se usaría si insertara un controlador de navegación dentro de otro controlador de navegación (algo que nadie en su sano juicio haría alguna vez).

0

De la documentación de UIViewController+UINavigationControllerItem, véase más adelante, debemos utilizar la propiedad navigationItem directamente en el controlador de vista:

// Created on-demand so that a view controller may customize its navigation appearance. 
@property(nonatomic,readonly,strong) UINavigationItem *navigationItem; 

UINavigationController también tiene un navigationItem propiedad ya que está heredando de UIViewController, pero estableciendo que ganó' t afecta las propiedades de navegación del controlador de vista.

Desde una prueba rápida, podemos ver que estos elementos de navegación no son iguales, ya sea:

(lldb) po self.navigationItem 
<UINavigationItem: 0x7f865c99ec50> 

(lldb) expr -- @import UIKit 
(lldb) po self.navigationController.navigationItem 
<UINavigationItem: 0x7f865c811740>