2010-09-08 35 views
1

Sinon, je pourrais utiliser quelque chose comme viewWillAppear, seulement passer des onglets n'appelle pas viewWillAppear - SI je peux accéder à selectedItem ou selectedIndex de manière fiable à partir de là.Obtenir le rappel/exécuter du code quand un onglet sur la barre Tab est cliqué

L'objectif est de réutiliser une vue de table similaire, avec 3 onglets remplissant la table avec des données filtrées différemment.

J'ai essayé de redéfinir didSelect et d'utiliser le délégué de l'application comme UITabBarDelegate, mais j'ai obtenu l'erreur 'Changer le délégué d'une barre d'onglets géré par un contrôleur de barre d'onglets n'est pas autorisé.'

Le contrôleur de barre d'onglets, rootCt, se trouve dans le délégué de l'application et fonctionne correctement.

Voilà l'astuce que je recherche: obtenir une notification du contrôleur racine (barre d'onglets) lorsque l'index a changé. Des idées?

Répondre

0

Je ne fais généralement pas ce genre de chose (répondre à ma propre question). Mais voilà. Par exemple, si je clique sur l'onglet 2, puis l'onglet 3, puis l'onglet 2 à nouveau, viewWillAppear pour cette vue est appelée, mais la méthode didSelectViewController n'est pas - et selectedIndex n'est pas modifié!

Il semble que la propriété selectedIndex n'est mise à jour que si une vue est chargée, et non si la vue est déjà chargée et apparaît simplement.

J'ai effectué quelques tests, et contrairement à selectedIndex, l'élément selectedItem de la barre d'onglets est correctement mis à jour (dans viewWillAppear pour la vue dans l'onglet cliqué) même si la vue est déjà chargée. En mettant f.ex. les titres des onglets dans un tableau, l'index correspondant peut être recherché.

Je vais donc omettre le didSelectViewController et aura pas besoin d'un UITabBarController, je ne dois connecter le UITabBar à un IBOutlet et utiliser [myTabBar selectedItem] .title pour initialiser correctement dans viewWillAppear de la vue utilisée de nouveau.

Si quelqu'un offre une solution plus générique/utile/simple, je le marquerai volontiers! Je reviendrai dans quelques jours et marquer ceci sinon.Juste content d'avoir fait le travail :)

2
tabBarController.tabBar.selectedItem.tag 

Il vous donnera l'étiquette de l'indice TabBar courant sélectionné

Si vous utilisez tabBar den

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 

est la méthode déléguée qui est appelée lorsque TabBar est sélectionné.

iCoding heureux ...

+0

Non, j'ai besoin d'exécuter du code lorsque le changement se produit. Depuis on peut naviguer sur misc. D'autres vues dans chaque onglet, j'ai besoin d'effectuer un certain 'réinitialisation' ou initialisation du code pour s'assurer que certaines choses sont restaurées, les données sont actualisées, la vue est présentable, ce genre de chose. Merci quand même, a fait le titre plus clair. Toute solution? –

+0

Utilisez-vous tabbar ou tabbarController? Edited ma réponse pour une meilleure compréhension –

4

Essayez la mise en œuvre d'un délégué de UITabBarController. Il a une méthode similaire à la méthode didSelect: proposée par le délégué UITabBar:
tabBarController:didSelectViewController:. Il sera appelé après que l'utilisateur a sélectionné un autre onglet.

Voir: UITabBarControllerDelegate Protocol Reference

+0

Oui, cela a fonctionné. Il était facile de déléguer un UITabBarControllerDelegate à l'application, et la première fois que je clique sur un onglet précédemment affiché, selectedIndex est correct. –

+0

J'ai fait une grosse erreur, à savoir d'appuyer sur Entrée lors de la saisie d'un commentaire. Le commentaire ci-dessus ne peut plus être modifié, a déclaré le forum après avoir tapé le reste. Heureusement, je pouvais copier le commentaire comme il se doit. Oui, ça a marché. Il était facile de déléguer un UITabBarControllerDelegate à l'application, et la première fois que je clique sur un onglet précédemment affiché, selectedIndex est correct. Cependant - si je clique sur l'onglet 2, puis l'onglet 3, puis l'onglet 2 à nouveau, viewWillAppear pour cette vue est appelée, mais la méthode didSelectViewController n'est pas - et selectedIndex n'est pas modifié! Existe-t-il un autre moyen d'obtenir un index correct? –

+0

Y at-il des notifications correspondantes pour (la plupart des) les méthodes déléguées UITabBarController, je me demande? Pas la méthode "devrait". Les autres. (Je ne trouve aucune réponse, donc je suppose que la réponse est non.) Dans ce cas, je pourrais simplement m'abonner aux notifications du contrôleur de la barre d'onglets de l'application, et laisser chaque VC faire ce qu'elle veut. Pour l'instant, je vais le suivre dans le délégué de l'application (yuck! Eww! Boo! Siffle!) Et envoyer une notification à partir de là. –

0

Vous pouvez utiliser la méthode délégué deUITabBarControllerDelegate

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

et que vous avez self.selectedIndex vous donnera l'index sélectionné.