2012-09-08 24 views
10

Bueno, en mi aplicación tengo un controlador de navegación con una vista de tabla, y al presionar un botón se abre un controlador de pestañas. En su primera pestaña, quiero que se establezca el título de la barra de navegación.Configurar el título de una barra de navegación dentro de un controlador de barra de pestañas

Aquí hay una imagen de mi guión gráfico solo para asegurarnos de que nos entendemos.

enter image description here

Este es mi código que supone estar funcionando. Había usado este código cuando intentaba abrir una vista única y no un controlador de pestañas, y estaba funcionando correctamente. Así que supongo que debo cambiar algo.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{  
     SkiCenter *myDetViewCont = [[SkiCenter alloc] initWithNibName:@"SkiCenter" bundle:[NSBundle mainBundle]]; 
     myDetViewCont.ski_center = [centers objectAtIndex:indexPath.row]; 
     UIStoryboard * storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
     [[self navigationController] pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"SkiCenterIds"] animated:YES]; 
     //[self.navigationController pushViewController:myDetViewCont animated:YES]; // "Pushing the controller on the screen" 
     [myDetViewCont release]; // releasing controller from the memory 
     myDetViewCont = nil;   
    } 

Dónde Skicenter es el nombre de la clase para mi primera pestaña y SkiCenterIds es el identificador de mi controlador de pestaña en guión gráfico.

Código de Skicenter .m es:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    self.navigationItem.title = ski_center;   
} 

pero no veo ningún título. Entonces, ¿qué he hecho mal? También he intentado esto:

[self.navigationController setTitle:@"Live"]; 

o

self.title=ski_center; 

la ski_center tiene valor porque se imprime normalmente en el NSLog.

+0

¿Está utilizando un controlador de la barra de pestañas dentro de un controlador de navegación? –

+0

Sí, lo hace – Fab1n

Respuesta

1

Básicamente no sé si did't notado pero Tengo que funcione de esta manera:

me asignaron mi cuenta de bar Controlador de una nueva clase.

hice lo siguiente:

añadirlo a delegate.h aplicación

@property (nonatomic,retain) NSString *center; 

añadirlo a mainmap.m

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    delegate.center=[centers objectAtIndex:indexPath.row]; 

y en mytabbarcontroller.m

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    ski_center=delegate.center; 

    self.navigationItem.title = ski_center; 
5

Ok para que lo sepas, es muy mala práctica de poner un UITabBarController dentro de un UINavigationController - Apple lo recomienda para el buen diseño de interfaz de usuario que sólo nunca debe poner un UINavigationController dentro de un UITabBarController y no al revés. De cualquier forma, debería poder cambiar el título del UITabBarController de esta manera;

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    [[self.navigationController.viewControllers objectAtIndex:0] setTitle:ski_center];   
} 

Eso debería funcionar.

+0

No funciona. La barra de navegación no tiene título. – ghostrider

+0

He actualizado mi respuesta, eche un vistazo para ver si funciona. – Wasim

+0

Tampoco funcionó. ¿que me sugieres que haga? Probé esta estructura porque de una tabla quiero abrir un menú de pestañas y no la primera que se abre para ser una pestaña. – ghostrider

1

probar esto:

[self.navigationController setTitle:@"Live"]; 
+0

No funciona. La barra de navegación no tiene título. – ghostrider

12

la adición a la solución de ghostrider, en el self.navigationItem.title mytabbarcontroller.m no funcionó para mí.Tengo un NavigationController cuya vista de detalle es un TabController y esto es lo que tengo en mi primera implementación pestaña

self.navigationController.visibleViewController.title = ski_center; 
+0

Esta fue la única solución que funcionó para mí. Mi configuración - UINavigationControllers dentro de UITabbarController (que es el controlador de vista raíz). De alguna manera, todas las otras soluciones obvias no funcionaron en absoluto. – Ingweland

+0

Esta debería ser la respuesta correcta. Bien hecho. Gracias por la ayuda. –

32

simple!

[self.tabBarController setTitle:@"Title"]; 
+0

El texto del título desaparece al cambiar entre los controladores de vista –

2
UITabBarController *tabController = (UITabBarController *)self.parentViewController; 

tabController.navigationItem.title = @"ABC"; 

Esto es trabajo para mí

Desde algunos R & D en internet

Usted tiene que pasar el navigationItem en la cadena. El UINavigationController muestra el elemento de navegación que pertenece a su topViewController que es UITabBarController. El UITabBarController muestra los títulos del elemento de navegación en sus pestañas. Así que lo que hay que hacer es asegurarse de que navigationItem del tabBarController es que es navigationItem

de selectedViewController Así que para recapitular:

título UINavigationController = topViewController.navigationItem.title

UITabBarController TabTitle = selectedViewController .navigationItem.title

UIViewController title = navigationItem.title

1

en Swift 3

self.tabBarController?.navigationItem.title = "Your title goes here" 
Cuestiones relacionadas