2010-12-12 17 views
1

I mis en œuvre l'événement UITabBarControllerDelegate:Comment puis-je annuler ouvrir un contrôleur de vue en cas didSelectViewController du protocole UITabBarControllerDelegate

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ 
    if (viewController == [tabBarController.viewControllers objectAtIndex:0]) { 
     //HERE:check some condition and cancel opening the viewController if needed 
    } 
} 

En fonction ci-dessus, après avoir vérifié une certaine condition, je voudrais app faire quelque chose d'autre (ouverture d'un autre contrôleur de vue) au lieu d'ouvrir le contrôleur de vue de droite que l'utilisateur a sélectionné sur l'élément de la barre d'onglets. Le comportement de l'événement:

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

ne correspond pas à ma demande.

+0

Comment shouldSelectViewController ne correspond pas à votre demande? Vérifiez simplement votre condition. Si cela correspond à la partie 'autre chose' et renvoyez NO, sinon retournez simplement YES dans cette méthode. – mrueg

+0

Je voudrais avoir l'effet de lumière sur l'élément de la barre et ouvrir une autre vue lorsque l'utilisateur a touché dessus. Si vous utilisez le shouldSelectViewController et renvoyez NO, il n'y a aucun effet sur ces éléments. –

Répondre

1

Si le retour de NO de shouldSelectViewController n'annule pas la transition vers un autre onglet, cela signifie que votre délégué ou autre élément est incorrect. Vérifiez si la fonction est réellement atteinte pendant l'exécution.

Le test dans shouldSelectViewController, renvoyant NO et présentant votre autre contrôleur de vue est la manière correcte de présenter d'autres vues sur un onglet.