Question

Je suis tombé sur une situation intéressante. J'ai une application iPhone avec 3 UITableViewController affichages contenant plus ou moins les mêmes données (vous pouvez dire que c'est une question de filtrage). Jusqu'à présent, j'avais 3 NIBs séparés, chacun avec son propre contrôleur. De plus, les UINavigationController s étaient à l'intérieur UITabBarController pour des raisons de boutons au-dessus.

Maintenant, pour optimiser l’application et réduire son encombrement, j’emballe toute la logique sur un contrôleur commun (un UITabBarItem) et ne laisse qu’un seul NIB en place. Le contrôleur commun se chargerait de filtrer les données et de pointer vers les données correctes.

Ainsi, je charge le même contrôleur commun sur trois des contrôleurs de navigation:

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

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

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

Maintenant tout va bien, les onglets s'affichent, les vues sous forme de tableau apparaissent. Mais lorsque vous touchez le prochain UITabBar et revenez au précédent, le <=> ne s'affiche pas, vous ne pouvez voir qu'un <=> à la place. Le <=> reste visible uniquement pour le dernier touché <=>.

Existe-t-il une sorte de <=> mécanisme de chargement de vues dont je n’ai pas connaissance?

Était-ce utile?

La solution

Chaque contrôleur de vue ne peut figurer que sur la pile d'un seul contrôleur de navigation et ne peut pas figurer à plusieurs endroits sur cette pile.

Si vous souhaitez réellement économiser de la mémoire en n'utilisant qu'un seul contrôleur de vue, je vous suggère de ne pas utiliser un contrôleur de barre de tabulation, mais simplement d'utiliser une vue de barre de tabulation et de définir votre contrôleur de vue racine en tant que délégué. Le contrôleur de vue racine interprète alors directement les événements de la barre d’onglet et modifie son filtrage en conséquence.

Autres conseils

Si vous souhaitez vraiment basculer les ensembles de données dans une seule vue, il semble qu'une meilleure approche consisterait à utiliser une barre d'outils plutôt qu'une barre de tabulation. La barre d'onglets concerne tout le changement de vue. Comme l'a souligné l'autre affiche, toutes les vues doivent être des enfants d'une vue et d'un contrôleur de navigation. Avoir une barre d'onglets qui appelle cet unique contrôleur pour changer de jeu de données est beaucoup plus logique. Sinon, utiliser un UISegmentedControl fonctionnerait également bien (puisque vous avez trois éléments et que vous ne pouvez avoir que trois segments).

L'utilisation de UITabbarController à l'intérieur de UINavigationController n'est pas prise en charge. Vous pouvez écrire un UIViewController normal pour imiter le UITabbbarController, qui peut être poussé pour afficher la pile. Voir cette SO question .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top