2009-08-30 23 views
14

Tengo un UINavigationController que se empuja un DetailsViewController. En este DetailsViewController, quiero usar la barra de herramientas que viene con cada UINavigationController (al menos, desde iPhone OS3.0).UIToolbar elementos que no muestran

Así, en viewDidLoad en mi DetailsViewController creo un UIBarButtonItem, lo agrego a una matriz y se lo entrego a otro controlador de navegación:

- (void) viewDidLoad { 
    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)]; 
    NSArray *items = [NSArray arrayWithObject: item]; 

    TestUIAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
    UINavigationController *navController = delegate.navigationController; 

    [navController setToolbarItems: items animated:NO];  
    [navController setToolbarHidden: NO animated: YES]; 
} 

Pero, por alguna razón, mientras que el UIToolbar está animado de para pantalla, el elemento no se agrega a la barra de herramientas.

¿Hay algún tipo de cosas de orden específicos tienen que ser hecho con el UIToolbar para que esto funcione?

P.S .: la aplicación está en modo horizontal (forzado) y el navigationController.view tiene una rotación transformar en él. ¿Podría eso tener algo que ver con eso?

Respuesta

37

haber hecho un poco más de excavación y la depuración y he llegado a la conclusión de que mi enfoque de tratar de modificar el navigationController estaba mal. En cambio, debería simplemente haber establecido la propiedad toolbarItems de DetailsViewController.

Después de eso, mi código funcionó bien:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemBookmarks target:self action:@selector(selectTemplate)]; 

     NSArray *myToolbarItems = [[NSArray alloc] initWithObjects: item, nil];   
     [self setToolbarItems: myToolbarItems]; 
     [myToolbarItems release]; 

    } 
    return self; 
} 
+1

comentario corto - que la asignación UIBarButtonItem parece que va a conseguir filtrado. Probablemente deberías configurarlo para su liberación automática. –

+1

Oh, cierto. Pero NSArray lo conserva, así que podría simplemente lanzar _item_ después de agregarlo a la matriz, ¿no? – NSSec

+0

Hice un -1 en este cos porque lo que hizo le permitió mostrarlo para ese controlador de vista, no sigue todos los controladores de vista posteriores durante la vida útil de la navegación ... que es lo que la mayoría de las barras de herramientas suelen hacer. – Jann

Cuestiones relacionadas