2012-09-08 7 views
10

Bene nella mia app ho un controller di navigazione con una vista tabella e quando si preme un pulsante si apre un controller di tabulazione. Nella sua prima scheda, voglio che il titolo della barra di navigazione sia impostato.Impostazione del titolo di una barra di navigazione all'interno di un controller della barra delle schede

Ecco un'immagine del mio storyboard solo per assicurarci di capirci l'un l'altro.

enter image description here

Questo è il mio codice che dovrebbe funzionare. Avevo usato questo codice, quando provavo ad aprire una singola vista e non un controller di tabulazione e funzionava correttamente. Quindi immagino di dover cambiare qualcosa.

- (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;   
    } 

Dove Skicenter è il nome della classe per la mia prima scheda e SkiCenterIds è l'identificatore del mio controller scheda in storyboard.

Codice in Skicenter .m è:

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

    self.navigationItem.title = ski_center;   
} 

ma non vedo alcun titolo. Quindi cosa ho fatto di sbagliato? Ho anche provato questo:

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

o

self.title=ski_center; 

lo ski_center ha valore perché viene stampato normalmente nel NSLog.

+0

Si sta utilizzando un controller barra delle schede all'interno di un controller di navigazione? –

+0

Sì, lo fa – Fab1n

risposta

1

Fondamentalmente io non so se si did't notato, ma ho ottenuto il lavoro in questo modo:

ho assegnato la mia barra delle schede controller una nuova classe.

ho fatto la seguente:

aggiungerlo al app delegate.h

@property (nonatomic,retain) NSString *center; 

aggiungerlo al mainmap.m

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

e in mytabbarcontroller.m

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

    self.navigationItem.title = ski_center; 
5

Ok solo così si sa, è molto cattiva pratica di mettere una UITabBarController all'interno di un UINavigationController - Apple consiglia per una buona progettazione dell'interfaccia utente che si solo si dovrebbe mai mettere un UINavigationController all'interno di un UITabBarController e non viceversa. In entrambi i casi, dovresti essere in grado di cambiare il titolo da UITabBarController in questo modo;

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

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

Che dovrebbe funzionare.

+0

Non funziona. La barra di navigazione non ha titolo. – ghostrider

+0

Ho aggiornato la mia risposta, si prega di dare un'occhiata e vedere se funziona. – Wasim

+0

Non ha funzionato neanche. cosa mi suggerisci di fare? Ho provato questa struttura perché da una tabella voglio aprire un menu a schede e non la prima schermata che si apre per essere una scheda. – ghostrider

1

provare questo:

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

Non funziona. La barra di navigazione non ha titolo. – ghostrider

12

L'aggiunta alla soluzione di ghostrider, nel mytabbarcontroller.m self.navigationItem.title non ha funzionato per me.Ho un NavigationController la cui vista di dettaglio è un TabController e questo è quello che ho nella mia prima implementazione tab

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

Questa era l'unica soluzione che ha funzionato per me. Il mio set up - UINavigationControllers all'interno di UITabbarController (che è il controller della vista radice). In qualche modo, tutte le altre soluzioni ovvie non funzionavano affatto. – Ingweland

+0

Questa dovrebbe essere la risposta corretta. Ben fatto. Grazie per l'aiuto. –

32

Semplice!

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

Il testo del titolo scompare al passaggio tra i viewcontrollers –

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

tabController.navigationItem.title = @"ABC"; 

Questo è il lavoro per me

Da alcuni R & D su internet

Devi passare la navigationItem a monte della catena. UINavigationController mostra il navigationItem che appartiene al suo topViewController che è UITabBarController. UITabBarController mostra i titoli navigationItem nelle sue schede. Quindi quello che dovete fare è assicurarsi che navigationItem del tabBarController è che è di selectedViewController navigationItem

Quindi, per ricapitolare:

titolo UINavigationController = topViewController.navigationItem.title

UITabBarController tabTitle = selectedViewController .navigationItem.title

UIViewController title = navigationItem.title

1

a Swift 3

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