2009-07-31 24 views

Respuesta

18

Sí, puedes.

Puede controlar cómo el botón de retroceso estándar se verá cuando otro controlador de vista es empujado en la parte superior de un controlador de vista determinado por el elemento de configuración de botón de barra de la espalda de su elemento de navegación (se puede personalizar el título o utilizar una imagen):

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]; 
self.navigationItem.backBarButtonItem = btn; 
[btn release]; 

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:nil action:nil]; 
self.navigationItem.backBarButtonItem = btn; 
[btn release]; 

Nota: configura esto en un controlador de vista "principal" que puede tener otros controladores de vista empujados encima. La configuración se realiza en el "padre" y la apariencia del botón Atrás se cambia cuando algún controlador de vista está en la parte superior. Al presionar el botón Atrás, regresa como se esperaba.


También puede crear su propia UIBarButtonItem y configurarlo como la leftButtonItem en la barra de navegación a la actual controlador de vista:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:self action:@selector(yourMethod:)]; 
self.navigationItem.leftBarButtonItem = btn; 
[btn release]; 

Nota: en este caso, la barra trasera/izquierda el elemento del botón se cambia para el controlador de vista actual (cuando está en la parte superior). Debe implementar el método yourMethod:. Si simplemente desea que el botón retroceda, debe manejar abrir el controlador de visualización usted mismo llamando al [self.navigationController popViewControllerAnimated:YES];.

3

Descubrí que ninguna de las soluciones solucionó realmente el BACK UIBarButton y también proporcionó su comportamiento oculto si el controlador de vista es root.

-(void)popViewControllerWithAnimation { 
[self.navigationController popViewControllerAnimated:YES]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    if([self.navigationController.viewControllers objectAtIndex:0] != self) 
    { 
     UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 26, 26)]; 
     [backButton setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal]; 
     [backButton setShowsTouchWhenHighlighted:TRUE]; 
     [backButton addTarget:self action:@selector(popViewControllerWithAnimation) forControlEvents:UIControlEventTouchDown]; 
     UIBarButtonItem *barBackItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
     self.navigationItem.hidesBackButton = TRUE; 
     self.navigationItem.leftBarButtonItem = barBackItem; 
    } 
} 
0

Funciona casi como un botón de retroceso. Con la excepción de la animación de transición (después de que se toca el botón y se quita la vista actual de la navegación a la derecha).

La manera correcta es hacer una categoría.

@interface UINavigationBar (MyNavigationBar) 
-(void)drawRect:(CGRect)rect; 
@end 

@implementation UINavigationBar (MyNavigationBar) 
-(void)drawRect:(CGRect)rect { 
UIImage *image = [UIImage imageNamed:@"....."]; 
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
Cuestiones relacionadas