J'essaie d'écrire une application qui utilise une barre de navigation et une barre d'onglets dans ce que (je suis en train de rassembler) est une manière inhabituelle. Fondamentalement, j'ai plusieurs "pages" ("maison", "paramètres", etc) qui ont chacun leur propre onglet. Je voudrais également l'avoir pour que la page "home" soit la vue racine de la barre de navigation, et les autres pages sont les vues de second niveau de la barre de navigation. En d'autres termes, je devrais pouvoir accéder à n'importe quelle page en cliquant sur l'élément de la barre d'onglets approprié et pouvoir accéder à la page d'accueil à partir de n'importe quelle autre page en cliquant sur le bouton Précédent de la barre de navigation.Application iPhone avec barre d'onglets et barre de navigation comme pairs
Actuellement, j'ai un UINavigationBar (via un UINavigationController) et un UITabBar (via un UITabController) en tant qu'enfants d'un UIView. Les contrôleurs de vue des différentes pages sont définis comme la propriété viewControllers
du contrôleur d'onglet et le contrôleur de la page d'accueil est également défini comme vue racine du contrôleur de navigation. La balise de chaque vue de page est définie sur son index dans le contrôle onglet. J'ai la logique suivante dans le délégué du contrôleur onglet didSelectViewController
méthode:
- (void) tabBarController:(UITabBarController*) tabBarController
didSelectViewController:(UIViewController*) viewController
{
if ([navController.viewControllers count] > 1)
[navController popViewControllerAnimated:NO];
[navController pushViewController:viewController animated:YES];
}
En outre, dans la méthode de délégué du contrôleur de navigation didShowViewController
, j'ai le code suivant:
- (void) navigationController:(UINavigationController *) navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
tabController.selectedIndex = viewController.view.tag;
}
Le problème qui se produit est que lorsque Je cours ceci, la barre de navigation, la barre d'onglets et la page d'accueil tous affichent ok, mais la barre d'onglets ne répondra pas à l'entrée - je ne peux pas choisir un autre onglet. Je pense qu'il est plus habituel d'avoir la barre d'onglets comme enfant du contrôle de navigation, ou vice versa. Cela ne semble pas correspondre à mon approche, car je ne veux pas avoir à créer individuellement le contrôle subordonné chaque fois qu'une modification survient dans le contrôle parent - par exemple: recréer une barre d'onglets chaque fois que la barre de navigation change.
Est-ce que quelqu'un a des suggestions quant à ce qui ne va pas et comment le réparer? Il me manque probablement quelque chose d'évident, mais peu importe, je n'arrive pas à le trouver. Merci!
EDIT: Je suppose qu'il a quelque chose à voir avec les deux contrôleurs essayant d'avoir la propriété du contrôleur de page, mais je ne peux pas pour la vie de moi trouver un moyen de contourner le problème.
Je pense que je pourrais faire les choses à votre façon. J'ai trouvé une solution potentielle en utilisant un UINavigationBar et un UITabBar "nus", mais cela pose beaucoup trop de problèmes à implémenter. Je rapporterai quand quelque chose fonctionnera. – Mac