2010-03-19 29 views
12

Tengo un UINavigationController con un UITableViewController en él. Quiero mostrar una barra de herramientas en la parte inferior con UIBarButtonItem. La barra de herramientas aparece, pero los botones no aparecerán. Alguien sabe por qué?Problema al agregar UIBarButtonItems a una barra de herramientas

- (void)viewDidLoad { 
     [super viewDidLoad]; 
    [[self navigationItem] setTitle:@"Selections List"]; 
    [[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addProjectSearch:)] autorelease]]; 
     [[self navigationItem] setLeftBarButtonItem:[self editButtonItem]]; 
    [[super tableView] setDataSource: self]; 
    [[super tableView] setDelegate: self]; 

    //Toolbar 
    UIBarButtonItem * logoutButton = [[[UIBarButtonItem alloc] initWithTitle:@"Log out" style:UIBarButtonItemStylePlain target:self action:@selector(logOut:)]autorelease]; 
    NSMutableArray * arr = [NSMutableArray arrayWithObjects:logoutButton, nil]; 
    [[self navigationController] setToolbarHidden: NO animated:YES]; 
    [[self navigationController] setToolbarItems:arr animated:YES]; 
    } 
+0

Tengo este problema exacto, y ninguna de las soluciones propuestas funciona para mí. Quizás alguien pueda comentar sobre qué cosas pueden salir mal y qué impide trabajar. Específicamente: el set-on-VC de Tom, el DIVAppear en vista de Olivier no funcionó. FWIW, aparece Mi barra de herramientas, pero sin botones. (Sí, llamé a setToolbarItems:!) – Olie

+0

** EDIT/Seguimiento: ** Mi error. Volver a leer las respuestas de Tom y Olivier y aplicar sus recomendaciones con más cuidado me puso en marcha. +1 a ambos. – Olie

Respuesta

14

Me enteré en el documentation de Apple que hay un pequeño párrafo que explica la UIToolBar. En este párrafo hay una oración muy pequeña que dice: "[..] Cuando se muestra, esta barra de herramientas obtiene su conjunto actual de elementos de la propiedad toolbarItems del controlador de vista activo [..]" Pero ellos no explican esa vista primero tiene que estar activo para obtener estos botones. Entonces eso significa que la UIToolBar está lista para recuperar sus Botones en viewDidAppear y NO en el mensaje viewDidLoad.

- (void)viewDidAppear:(BOOL)animated { 
    [[self tableView] reloadData]; 

    [[self navigationController] setToolbarHidden: NO animated:YES];  
    UIBarButtonItem * logoutButton = [[[UIBarButtonItem alloc] initWithTitle:@"Log out" style:UIBarButtonItemStylePlain target:self action:@selector(logOut:)]autorelease]; 
    NSMutableArray * arr = [NSMutableArray arrayWithObjects:logoutButton, nil]; 
    [self setToolbarItems:arr animated:YES]; 

    [super viewDidAppear:animated]; 
} 
+0

¡Sí! setToolbarHidden, setToolbarItems, y [super viewDidAppear:] deben ser llamados. – Nianliang

+0

podemos establecer las posiciones de UIBarButtonItem –

0

Tal vez se puede usar constructor de interfaces para evitar esto, sin embargo, será más lenta

+0

Pero, ¿dónde agrego esa UIToolBar a. No pude agregarlo a mi UITableViewController –

0

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html

"El objeto controlador de navegación ahora maneja una barra de herramientas opcional en su jerarquía de vistas. Cuando se muestra, esta la barra de herramientas obtiene su conjunto actual de elementos de la propiedad toolbarItems del controlador de vista activo. "

¿Ha intentado subclasificar UITableViewController para su vista de tabla y configuración con la propiedad adecuada toolbarItems?

+0

Estoy subclasificando UITableViewController. ¿A qué te refieres con "toolbarsItem apropiado"?También lo probé con: [self setToolbarItems: arr animado: YES]; Pero eso todavía no funciona. –

+0

He votado esta respuesta porque me parece que Olivier ha leído la documentación y todavía tiene un problema, por lo que ha venido a pedir consejo. Además, aunque no ayudó a Olivier, la respuesta de Tom resolvió mi problema. – Matt

45

Reemplazar esta línea:

[[self navigationController] setToolbarItems:arr animated:YES];

con esto:

[self setToolbarItems:arr animated:YES];

En general, se debe configurar toolbarItems en cada controlador de vista individual que se presiona, y no en su UINavigationController sí mismo.

+0

Ahora, ¿por qué esto todavía no funciona para mí? Parecía ser la respuesta perfecta ... –

0

he hecho un controlador de vista, que es una subclase de UITableViewController, y tengo la barra de herramientas de trabajo de la siguiente manera:

En viewDidLoad:

self.navigationController.toolbar.barStyle = UIBarStyleBlackTranslucent; 

NSArray* toolbarItems = [NSArray arrayWithObjects: button1, 
                button2, 
                button3, 
                nil]; 

[self setToolbarItems:toolbarItems animated:NO]; 

Entonces , porque quiero que la barra de herramientas solo en esta pantalla, he añadido esto para ver aparecer: Aparece:

[self.navigationController setToolbarHidden:NO animated:YES]; 

Y aleta aliado, que oculta la barra de herramientas de nuevo en viewWillDisappear:

[self.navigationController setToolbarHidden:YES animated:YES]; 

Esto funciona para mí con botones de "texto" del año iconos e iconos personalizados.

Cuestiones relacionadas