2010-11-25 3 views
0

Dans mon AppDelegate, je crée un UITabBarController et UINavigationController dynamiquement. J'ajoute ensuite 3 vues à cela.Ajouter à mon bouton Afficher « En-tête/Titre » bar

// Prepare the tab bar controller 
tabBarController = [[UITabBarController alloc] init]; 

// Switch controller 
UserSettingsController *settingsController = [[UserSettingsController alloc] init]; 

// Switches controller 
SwitchesController *switchesController = [[SwitchesController alloc] init]; 

// Help controller 
HelpController *helpController = [[HelpController alloc] init]; 

NSArray *controllers = [NSArray arrayWithObjects: switchesController, settingsController, helpController, nil]; 
tabBarController.viewControllers = controllers; 

if (self.navigationController == nil) { 
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:tabBarController]; 
} 

[window addSubview:navigationController.view]; 

Lorsque j'ai fait cela au début, j'ai remarqué que j'ai maintenant une barre d'en-tête/titre en haut de ma page. Il est vide et prend vraiment de la place. J'aimerais cependant l'utiliser et ajouter un bouton «Actualiser» à l'une de mes vues.

De l'avis Je suis intéressé, j'ai essayé ce qui suit:

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    UIBarButtonItem *refresh = [[UIBarButtonItem alloc] initWithTitle:@"Refresh" style:UIBarButtonItemStylePlain target:self action:@selector(refreshSwitches:)]; 
    self.navigationItem.rightBarButtonItem = refresh; 
    [refresh release]; 
} 

-(void)refresh{ 
    ... 
} 

Aucun bouton montré, donc je suis soit loin ou je manque quelque chose.

Des suggestions?

Merci

+0

Difficile de dire exactement ce qui va mal à partir de ce code. Pourriez-vous montrer un peu plus de votre code d'initialisation (pour les vues/contrôleur de nav)? Aussi, avez-vous confirmé que viewDidLoad est appelé? – Sam

+0

@Sam - oui, viewDidLoad est en cours d'exécution. J'ai modifié le message et ajouté mon code de démarrage pour les vues, tabBarController, navController. – bugfixr

Répondre

0

je crois que le problème est que vos contrôleurs de vue que vous avez ajoutés au contrôleur ne sont pas TabBar encapsulées par les contrôleurs de navigation. Bien que votre UITabBarController dispose d'un contrôleur de navigation, cela ne donne pas implicitement tous ses contrôleurs de navigation onglets (et sans un contrôleur de navigation, navigationItem de contrôleur de vue ne rien faire.) Pour remédier à ce problème, je vous suggère d'encapsulage vos contrôleurs de vue avec contrôleur de navigation lors de l'initialisation:

ex:

UserSettingsController *settingsController = [[UserSettingsController alloc] init]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:settingsController]; 
[settingsController release]; 

// etc... 

NSArray *controllers = [NSArray arrayWithObjects:navController, ..., ..., nil]; 
tabBarController.viewControllers = controllers; 

// Release your nav controllers, other cleanup 

EDIT

d'accord, je pense avoir une meilleure idée de votre configuration maintenant. Je suis en mesure d'obtenir ce qui suit au travail:

self.tabBarController.navigationItem.rightBarButtonItem = myButton; 

Une mise en garde importante est que le bouton persistera sur toutes les vues de votre tabbarcontroller sauf si vous supprimez explicitement. Cela peut s'avérer gênant/inélégant à maintenir, mais je ne suis pas sûr d'une autre solution si la vue que vous voulez avoir le bouton n'est pas directement associée à un contrôleur de navigation lui-même.

+0

Cela semble étrange ... mon settingsController a "sous vues" - Je clique sur une ligne de ma table et pousse une nouvelle vue sur le contrôleur de nav et ça marche ... quand je change de cette méthode, j'ai deux "barres" "en haut jusqu'à ce que je supprime le contrôleur tabBars nav, mais quand je fais cela, je ne peux plus pousser les vues de mon settingsController .... – bugfixr

+0

@Chu J'ai édité ma réponse avec une autre solution possible (qui ne vous force pas à donner les vues des contrôleurs de nav.) – Sam