2009-03-19 11 views
0

Je suis tombé sur une situation intéressante, j'ai une application iPhone avec 3 UITableViewController s affichant chacun plus ou moins les mêmes données (vous pouvez dire qu'il s'agit d'un filtrage). À ce jour, j'avais 3 NIB distincts pour cela, chacun avec son propre contrôleur, en plus les UITableViewController étaient à l'intérieur de UINavigationController pour le plaisir des boutons sur le dessus. Maintenant, pour optimiser l'application et réduire son empreinte, j'emballe toute la logique à un contrôleur commun (un UITableViewController) et a laissé un seul NIB en place. Le contrôleur commun prendrait soin de filtrer les données et de pointer vers les données correctes.UITableViewController avec UITabBarController ne s'affiche pas

Donc, je charge le même contrôleur commun à 3 des contrôleurs de navigation:

navControllerA = [[UINavigationController alloc] initWithRootViewController: commonTableController]; 

et ajouté ces contrôleurs de navigation au UITabBarController:

navigationControllersArray = [NSArray arrayWithObjects: navControllerA, navControllerB, navControllerC, nil]; 
[tabController setViewControllers:[NSArray arrayWithArray:navigationControllersArray]]; 

Maintenant, tout est très bien, la affichage des onglets, les vues de la table s'affichent. Mais une fois que vous touchez le UITabBarItem suivant et revenir à la précédente UITableViewController ne s'affiche pas, vous pouvez seulement voir un UIWindow à sa place. Le UITableViewController reste visible uniquement pour le dernier contact UITabBarItem.

Y a-t-il une sorte de mécanisme de chargement de vue UITabBar que je ne connais pas?

Répondre

1

Chaque contrôleur de vue ne peut se trouver que sur la pile d'un contrôleur de navigation et ne peut pas se trouver à plusieurs endroits sur cette pile. Si vous voulez vraiment économiser de la mémoire en utilisant seulement un contrôleur de vue, je suggère que plutôt que d'utiliser un contrôleur de barre d'onglets, vous utilisez simplement une vue de barre d'onglets et définissez votre contrôleur de vue racine comme délégué. Le contrôleur de vue racine interpréterait alors directement les événements de la barre d'onglets et modifierait son filtrage en conséquence.

0

Si vous voulez vraiment basculer les ensembles de données dans une vue, il semble qu'une meilleure approche serait d'utiliser une barre d'outils plutôt qu'une barre d'onglets. La barre d'onglets permet de changer de vue lorsque l'autre affiche l'indique, toutes les vues doivent être des enfants d'une vue et d'un contrôleur de navigation. Avoir une barre d'onglets qui appelle dans ce contrôleur unique pour changer les ensembles de données est beaucoup plus logique, ou bien utiliser un UISegmentedControl fonctionnerait bien aussi (puisque vous avez trois éléments et vous pouvez seulement avoir jusqu'à trois segments).

0

L'utilisation de UITabbarController dans UINavigationController n'est pas prise en charge. Vous pouvez écrire un UIViewController normal pour imiter le UITabbbarController, qui peut être poussé pour voir la pile. Voir ce SO question.