2010-11-16 26 views
16

Je souhaite désactiver l'action par défaut lorsque l'utilisateur appuie sur l'élément de la barre d'onglets. Par exemple, j'ai une tabulation avec Tab1, Tab2 et Tab3. Dans Tab1, l'utilisateur peut naviguer de View1 à View3 (View1> View2> View3). Si l'utilisateur est sur View3 et qu'il tape sur Tab1, l'application amène l'utilisateur à View1 (le contrôleur de vue racine). Je veux désactiver cette fonctionnalité. Je ne veux pas que le tap sur Tab1 fasse apparaître tous les contrôleurs de vue. Comment puis je faire ça?Désactiver l'action - l'utilisateur appuie sur l'élément de la barre d'onglets pour accéder au contrôleur de la vue racine

Edit:

Ce comportement est un peu étrange, mais un raccourci pratique en cas de hiérarchie profonde!

Vous pouvez mettre en œuvre suivant les méthodes de UITabBarControllerDelegate pour désactiver ce système large raccourci:

#pragma mark - 
#pragma mark UITabBarControllerDelegate 

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { 
    UIViewController *tbSelectedController = tbc.selectedViewController; 

    if ([tbSelectedController isEqual:vc]) { 
     return NO; 
    } 

    return YES; 
} 

Répondre

19

si vous regardez le délégué UITabBarController il existe une méthode:

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

Si vous implémentez dans votre classe , vous pouvez vérifier si UIViewController est déjà affiché et retourner NO, ce qui empêchera que cela se produise.

J'ai eu le même problème avec un objet ABPeoplePicker embarqué dans un UITabBarController, en ce sens en appuyant sur l'onglet «Contacts d'un deuxième temps qui a été déjà affichée rendrait le contrôle ABPeoplePicker montrer les « Groupes »

+0

A travaillé! Merci. – Mustafa