2011-10-18 4 views
0

J'ai une application dans laquelle j'essaie de changer dynamiquement l'onglet de la barre d'onglets à travers le code. L'onglet commute correctement.Quand je clique sur un onglet la méthode didSelectController de la onglet est appelé et mon problème est quand je clique sur un onglet de l'onglet sur lequel je suis en train de commutation de vues, sa barre de navigation disparaît et c'est image tabbar et le titre disparaissent également.Veuillez m'aider à résoudre ce problème.Merci. C'est mon code.comment obtenir la barre de navigation lorsque le contrôleur de la barre d'onglets est cliqué

dans le appdelegate

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    NSString *clockswitch = [[NSUserDefaults standardUserDefaults]objectForKey:@"clock"]; 
    UIViewController *desiredController = nil; 
    if ([clockswitch isEqualToString:@"digital"]) { 
     desiredController = [[DigitalClockViewController alloc] initWithNibName:@"DigitalClockViewController" bundle:nil ]; 


    } 
    else { 
     desiredController = [[AnalogClockViewController alloc]initWithNibName:@"AnalogClockViewController" bundle:nil]; 


    } 
    NSMutableArray *controllersCopy = [self.tabBarController.viewControllers mutableCopy]; 
    [controllersCopy replaceObjectAtIndex:0 withObject:desiredController]; 
    self.tabBarController.viewControllers = controllersCopy; 

} 

Répondre

0

Si vous voulez que chaque contrôleur de vue au sein de votre contrôleur de barre d'onglets pour avoir une barre de navigation, vous devez « envelopper » chaque contrôleur de vue dans un contrôleur de navigation, puis, mais le contrôleur de navigation dans la propriété viewControllers de votre contrôleur de barre d'onglets. Vous enveloppez comme ceci:

UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:desiredController]; 
+0

cela a fonctionné mais comment rendre le titre et l'image de tabbaritem également visibles. – Rani

+0

Vous devez éditer le titre de votre viewController et le tabBarItem du navigationController pour l'image. –

+0

J'ai édité le titre de mon viewController mais il n'affiche pas le titre de tabbaritem et l'image – Rani

1

code Vous change l'ordre dans lequel les contrôleurs vue apparaissent dans la barre d'onglets, ne pas changer le contrôleur de vue sélectionnée comme vous semblez vouloir. Cela peut entraîner le même affichage du contrôleur de vue deux fois dans la barre, ce qui peut avoir des effets secondaires inattendus. Pour modifier la sélection, utilisez selectedIndex ou selectedViewController. Vous voulez sélectionner l'un des contrôleurs déjà présents, pas un alloc/init nouveau; et, comme l'a dit Johannes, l'entrée dans la liste des contrôleurs est UINavigationController avec rootViewController qui est une instance de votre classe (isKindOf:).

+0

pourriez-vous m'expliquer s'il vous plaît en détail. Peut fournir un exemple de code – Rani

0
if ([clockswitch isEqualToString:@"digital"]) 
{ 
    desiredController = [[DigitalClockViewController alloc] initWithNibName:@"DigitalClockViewController" bundle:nil ]; 
    navigationController=[[UINavigationController alloc] initWithRootViewController:desiredController]; 
    [self presentModelViewController:navigationController animated:YES]; 
    [navigationController release]; 
    [desired... release]; 


} 
else { 
    desiredController = [[AnalogClockViewController alloc]initWithNibName:@"AnalogClockViewController" bundle:nil]; 

...//same code 
} 
Questions connexes