2012-02-14 9 views
5

Estoy desarrollando una aplicación iPhone con último SDK y XCode 4.2No se puede cambiar de nuevo el botón de título, pero puedo ocultarlo

Puedo usar un UINavigationController, y para mostrar un nuevo ViewController I hacer esto en AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     // Override point for customization after application launch. 
     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
     { 
      self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
     } 
     else 
     { 
      self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
     } 
     self.viewController.title = NSLocalizedString(@"MAIN", nil); 

     navController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 
     navController.navigationBar.tintColor = [UIColor darkGrayColor]; 

     self.window.rootViewController = navController; 
     [self.window makeKeyAndVisible]; 
     return YES; 
    } 

    - (void) openDocumentation 
    { 
     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
     { 
      docViewController = [[DocumentationViewController alloc] initWithNibName:@"DocumentationViewController_iPhone" bundle:nil]; 
     } 
     else 
     { 
      docViewController = [[DocumentationViewController alloc] initWithNibName:@"DocumentationViewControllerr_iPad" bundle:nil]; 
     } 
     docViewController.title = NSLocalizedString(@"DOCUMENTATION", nil); 
self.viewController.navigationItem.backBarButtonItem.title = @"Back"; 
     [navController pushViewController:docViewController animated:YES]; 
    } 

en DocumentationViewController.m hago esto:

- (void) viewWillAppear:(BOOL)animated 
{ 
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                    style:UIBarButtonItemStylePlain target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = backButton; 
} 

Pero no cambia el título del botón Atrás.

que mover ese código para viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                    style:UIBarButtonItemStylePlain target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = backButton; 
} 

- (void) viewWillAppear:(BOOL)animated 
{ 

} 

Pero aún así no funciona.

Y esto no funciona bien:

- (void) viewWillAppear:(BOOL)animated 
{ 
    self.navigationItem.backBarButtonItem.title = @"Back"; 
} 

Pero si hago esto, para poner a prueba si no puedo acceder botón Atrás:

- (void) viewWillAppear:(BOOL)animated 
{ 
    self.navigationItem.hidesBackButton = YES; 
} 

Funciona !! Y oculta el botón Atrás.

¿Qué estoy haciendo mal?

Respuesta

19

El título del botón de retroceso que se muestra en UINavigationViewController no depende del navigationItem.backBarButtonItem.title del controlador de vista superior de la pila. Depende del segundo valor de control de la vista superior de navigationItem.backBarButtonItem.title.

Por lo tanto, debe establecer navigationItem.backBarButtonItem.title para cualquier vista que muestre el controlador cuando presione DocumentViewController.

+0

Ok, y ahora: ¿Cómo puedo cambiarlo? – VansFannel

+0

Ver la respuesta actualizada – yuji

+0

Lo siento pero no te entiendo. He agregado esta línea de código al final del método de apertura de aplicación de AppDelegate: 'navController.navigationItem.backBarButtonItem.title = @" Back ";'. Pero, aún no muestra el texto Atrás. – VansFannel

1

Sólo añadir en el guión gráfico o plumilla archiva su botón personalizado (esto reemplazará el botón de navegación) y añadir una acción posterior para ello:

- (IBAction)back:(id)sender { 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

Para mí, permite personalizar mi botón de retroceso.

2

Cuando establece el título backBarButtonItem de un UIViewController, en realidad está configurando el título para el botón Atrás si este UIViewController es el segundo controlador en la pila UINavigationController.

self.navigationItem.backBarButtonItem.title = @"Custom Title"; 

Por lo tanto, si el controlador de vista anterior ya está en el controlador de navegación y, posteriormente, empuja un controlador de vista del niño en el controlador de navegación, el título botón de retroceso será "Título personalizado".

+1

Lamentablemente, no funciona – Lachtan

0

En realidad se puede hacer esto con sólo un truco:

clase UINavigationBar

Anulación y añadir esta línea de código:

- (void)layoutSubviews{ 
    self.backItem.title = @""; 
    [super layoutSubviews]; 
} 

Entonces inicializar su UINavigationController con esta clase UINavigationBar personalizada .. etc

UINavigationController * navController = [[UINavigationController alloc] initWithNavigationBarClass:[CBCNavigationBar class] toolbarClass:nil]

esperanza esto ayuda

Cuestiones relacionadas