7

En iPhone OS 3.0, puede establecer los elementos de la barra de herramientas de un UINavigationController utilizando el método setToolbarItems:animated:. Sin embargo, esto requiere que transfiera una variedad de UIToolbarItems. Si bien podría crear programáticamente estos elementos de la barra de herramientas, preferiría crearlos en Interface Builder si fuera posible.Configuración de elementos de la barra de herramientas de UINavigationController

Con esto en mente, he creado una UIToolbar en "MyGreatViewController.xib" y la he llenado con los elementos de la barra de herramientas deseada. Luego, en "MyGreatViewController.m", consigo los elementos de la barra de herramientas y pasarlos a setToolbarItems:animated::

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self setToolbarItems: [toolbar items]]; 
} 

... donde toolbar es un IBOutlet refiriéndose a la UIToolbar.

¿Es este un buen enfoque? ¿Hay una mejor manera de lograr esto? ¿Debo simplemente crear los elementos programáticamente?

+0

No entiendo algo: Usted dice "yo obtener los elementos de la barra de herramientas ", pero luego los devuelve a la barra de herramientas? ¿Ya no se muestran? – Oscar

Respuesta

4

Es una forma perfectamente aceptable de hacerlo, pero tenga en cuenta que cargar archivos xib es bastante caro en el iPhone, y puede ser más rápido crear los elementos de la barra de herramientas de forma programática en su método viewDidLoad.

+3

Genial. Como el XIB ya se está cargando cuando se inicia la clase de controlador de vista (comprobé "Con XIB para interfaz de usuario" al crear los archivos del controlador de vista), este enfoque no debería ser más costoso que crear elementos de barra de herramientas mediante programación. –

+0

Ah, si ya está cargando un XIB, no agregará demasiado tiempo extra. Desarchivar objetos de un XIB * es * más caro que crearlos en código, pero a menos que su vista tarde en cargarse, no me preocuparía. – iKenndac

12

No sé si esto está documentado en cualquier lugar, pero he encontrado que en Interface Builder, si habilita la barra de herramientas del controlador de navegación, puede arrastrar los elementos de la barra a su controlador de vista, y aparecerán automágicamente en la barra de herramientas del controlador de navegación.

Por ejemplo, esto es lo que podemos hacer (usando Xcode 3.2 en Snow Leopard):

  1. Archivo-> Nuevo proyecto .... Elige a base de navegación de la aplicación y crear el proyecto.
  2. Abra MainWindow.xib en Interface Builder.
  3. Seleccione el Controlador de navegación, y en el inspector de Atributos, marque la casilla "Mostrar barra de herramientas". Esto hará que aparezca un objeto de la barra de herramientas.
  4. Arrastre un elemento de botón de barra de la biblioteca a la barra de herramientas. Aparecerá en la barra de herramientas. Si revisa la jerarquía en el NIB, verá que este nuevo elemento es un elemento secundario del RootViewController.

Parece que cualquier elemento de botón de barra agregado como elementos secundarios del elemento de navegación se mostrará en la barra de navegación y los elementos del botón de barra agregados como elementos secundarios del controlador de vista aparecerán en la barra de herramientas.

(Me encontré con este por accidente Si alguien puede encontrar documentación para este comportamiento, o cualquier información adicional, me gustaría saberlo..)

+0

Creo que así es como debería ser. Algo así como 'UIViewController' mágicamente cargando es xib si tiene un nombre de archivo coincidente. – Sneakyness

+0

¡Funciona! Esta es definitivamente la mejor manera de configurar la barra de herramientas en una vista de navegación, creo. – Nathan

+0

En mi aplicación, tengo un Controlador de barra de pestañas y una de las pestañas es un Controlador de navegación: configuración bastante estándar. Sin embargo, si sigo lo que sugiere Kristopher, después del paso 3, la barra de herramientas aparece detrás de la barra de pestañas en el IB. Y cuando intento el paso 4 (traté de agregar control/botón de segmento), simplemente no me permite soltarlo en la barra de herramientas. ¿Me estoy perdiendo de algo? – Dev

Cuestiones relacionadas