9

Tengo un UINavigationController cargándose en la primera pestaña de un UITabBarController. Me gustaría agregar un botón de actualización en el lado derecho del UINavigationItem. Mi entendimiento oscuro es que uno tiene que establecer propiedades como títulos y botones en un controlador de navegación antes de que se agrega a la jerarquía de control. No tengo problemas añadiendo botones al controlador de navegación para niños, pero estoy perplejo por cómo cambiar la raíz, ya que se está cargando desde el plumín.Agregar un UIBarButtonItem de actualización a un UINavigationController cargado desde un NIB

Por lo tanto, en el recuadro IB de abajo (no hay suficientes puntos de reputación, déjenme intentar diagramar esto ...), estoy tratando de agregar un botón de actualización al elemento seleccionado.

  • propietario
  • primera respuesta
  • App Delegado
  • Ventana
  • barra de pestañas controlador
    • barra de pestañas
    • Observación Lista Vista Controlador de archivo
      • Navig ación Bar
      • Vista Controlador
        • Tabla
        • Navegación artículo
      • barra de pestañas artículo
    • otra lista Vista Controlador
    • etc.
    • etc.

He intentado añadir el botón de viewDidLoad del controlador de navegación, sin ayuda:

- (void)viewDidLoad { 
[super viewDidLoad]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
     initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh 
     target:self 
      action:@selector(refresh:)]; 
} 

También he intentado añadir mi programación ObservationListViewController a la UITabBarController, e inserte el botón en ese bloque, pero estoy fuera de mi profundidad.

¿Alguna idea de cómo podría inyectar agregando un botón en el proceso de cargar un controlador de navegación desde la punta?

¡Gracias!

Respuesta

21

Parece que su método viewDidLoad está asignando pero no liberando el elemento del botón de la barra. usted debe hacer esto:

UIBarButtonItem *button = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh 
    target:self 
     action:@selector(refresh:)]; 
self.navigationItem.rightBarButtonItem = button; 
[button release]; 

que tiene que hacer esto no en el controlador de navegación, pero en el controlador de vista raíz que está contenido dentro del mando de navegación. En otras palabras, colóquelo en "Controlador de vista" no "Controlador de vista de lista de observación"

Cada controlador que inserte en el controlador de nav puede tener su propio auto.navigationItem.whatever y esto será mostrado por el controlador nav cuando el nuevo controlador es empujado a su pila.

+1

Nimrod, you rock! ¡Una explicación que incluso yo puedo seguir! – Scott

Cuestiones relacionadas