2010-03-25 12 views
1

J'ai une application simple où le seul contrôleur de vue a une sortie à un UITabBar. Il met également en œuvre UITabBarDelegate et est défini comme le délégué pour la UITabBar:UITabbar sans contrôleur

@interface TheMainViewController : UIViewController <UITabBarDelegate> 
{ 
     IBOutlet UITabBar *theTabBar; 
} 

I mis en œuvre la méthode suivante qui est appelée à chaque fois que l'un de mes 4 UITabBarItems obtenir taraudés. J'ai essayé simplement de faire quelque chose très simple:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
     tabBar.selectedItem = [tabBar.items objectAtIndex:0]; 
     return; 
} 

En théorie, il doit toujours rester sélectionné sur mon premier onglet et il fonctionne parfaitement quand je tape tout simplement UITabBarItem (rien ne se passe, le premier reste toujours sélectionné). Mais quand je touche un UITabBarItem et que je le tiens (je ne retire pas mon doigt), la sélection change quand même! Débogage, tout est appelé correctement. C'est comme changer la propriété selectedItem n'a aucun effet si l'utilisateur a toujours l'élément "down" (avec le doigt dessus).

Quelle serait une bonne solution de contournement? J'ai essayé de surcharger UITabBar et de jouer avec touchesBegan et touchEnd mais ils ne sont même pas appelés. Pareil avec UITabBarItem.

Oh et s'il vous plaît ne suggère pas d'utiliser un UITabBarController car il n'est pas assez flexible pour mon application.

Si frustrant .... merci!

Répondre

2

Il semble que - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item est appelée lorsque l'utilisateur prend son doigt et pas avant.

Je sais que vous ne voulez pas utiliser un UITabBarController mais que vous avez ici toutes les fonctionnalités que vous voulez. Pourquoi ne voulez-vous pas utiliser un contrôleur?

UITabBarController méthode déléguée qui devrait fonctionner:

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

Vous pouvez alors revenir NO là-dedans, et la sélection ne changera pas.

+1

Eh bien fondamentalement, j'ai déjà un tas d'autres vues qui s'animent en fonction de l'état de la barre d'onglets (plus de diapositives dedans et dehors). En outre, mon tabbar n'est pas au fond comme le contrôleur le fait. Passer à un contrôleur nécessiterait un refactor majeur que je veux éviter. Comme pour tout autre commentaire, lorsque vous cliquez et maintenez un tabbar, la fonction "didselectitem" est appelée après un petit délai même si l'élément réel n'est mis en surbrillance que lorsque vous le relâchez. – Etienne