2010-03-03 7 views
2

Quelqu'un peut me aider, quand je me sers de mon délégué UITabBarController il ne fonctionne pas ..délégué TabBarController ne fonctionne pas

J'ai appelé une méthode de délégué comme celui-ci ..

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 

[self.navigationController popToRootViewControllerAnimated:NO]; 
} 
+0

Qu'est-ce qui ne fonctionne pas? Est-ce que rien ne se passe ou est-ce que ça plante? Avez-vous mis un point d'arrêt dans la méthode pour voir si elle est appelée ou est-ce votre problème? Nous avons besoin de plus d'informations :) – deanWombourne

+0

Avez-vous correctement ajouté le délégué? – willcodejavaforfood

+0

Veuillez être précis lorsque vous posez une question. Cela vous troublera si vous regardez votre question après quelques jours :). Alors s'il vous plaît soyez plus informatif tout en posant la question afin que vous puissiez obtenir exactement ce que vous vouliez :) – Manjunath

Répondre

0

Read the documents à mieux comprendre les relations entre les contrôleurs de navigation, les contrôleurs tabBar et la hiérarchie de vue et de navigation.

Ensuite, passez en revue le code que vous avez fourni. Quelle vue/contrôleur est le conteneur? Vous faites apparaître le fichier navigationController de self, qui n'est pas le même que le tabBarController. Je ne pense pas que vous ayez réellement besoin de cette méthode si vous cherchez à passer d'un onglet à l'autre.

Essayez de mettre en commentaire cette méthode. C'est une méthode optionnelle dans le protocole de délégué UITabBarController. Si vous commentez, vous devriez obtenir le comportement par défaut du contrôleur de tabulation, qui devrait être de sélectionner le viewController approprié et de passer à la nouvelle vue.

Vous ne devez généralement utiliser cette méthode que si vous souhaitez que des actions soient prises lorsque vous basculez entre les contrôleurs de vue.

1

Cela pourrait vous aider

-(void)applicationDidFinishLaunching:(UIApplication *)application { 
    tabBarController.delegate=self; 
    // Add the tab bar controller's current view as a subview of the window 
    [window addSubview:tabBarController.view]; 
} 
0

spécifier

UITabbarcontrollerDelegate dans le fichier .h

puis

-(void)applicationDidFinishLaunching:(UIApplication *)application { 

tabBarController.delegate=self; 

// Add the tab bar controller's current view as a subview of the window 
[window addSubview:tabBarController.view]; 
} 
12

Si ce que vous faites est un sous-classement UITabBarController, alors. .. assez curieusement ... vous pouvez le faire fonctionner en se définissant comme un délégué:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.delegate = self; 
} 

Ensuite, l'action didSelectViewController se déclenche normalement:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    NSLog(@"View Changed"); 
} 

Ne pas oublier d'ajouter votre classe UITabBarControllerDelegate à votre fichier .h:

@interface MyTabBarController : UITabBarController <UITabBarControllerDelegate> 

@end 
+1

Oui, il semble bien contre-intuitif qu'un contrôleur aurait besoin d'un délégué surtout quand ce contrôleur est aussi son délégué – HairOfTheDog

+0

je suis les étapes ci-dessus, mais pas de succès Je manipule uitabbar par programme. – Akhtar

2

Si vous utilisez la barre d'onglets Personnalisation en étendant UITabBarController et en essayant de changer l'index sélectionné par la barre d'onglets par programmation alors il n'appellera pas les délégués.

S'il vous plaît voir la note à l'intérieur "UITabBarDelegate":

// Note: called when a new view is selected by the user (but not programmatically) 
+1

C'est la bonne réponse pour la plupart des problèmes liés à ce délégué qui ne tire pas. +1 –