2012-06-16 7 views
3

J'ai deux versions d'une application ios5 à onglets, l'une créée en utilisant un storyboard et l'autre utilisant des fichiers xib. La version du storyboard n'appelle pas la méthode UITabBarControllerDelegatedidSelectViewController (la version xib le fait). Quelque chose (je pense) est absent du storyboard, mais je ne sais pas quoi. Une autre façon de cadrer la question pourrait être - comment puis-je faire référence à l'objet UITabBarController instancié par le storyboard?Méthode didSelectViewController non appelée (avec storyboard)

Merci pour votre aide.

EDIT: Le contrôleur de la barre d'onglet délégué est défini:

En AppDelegate.h:

@interface MyAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate> 
@property (strong, nonatomic) UITabBarController *tabBarController; 

En AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.tabBarController.delegate = self; 
    return YES; 
} 

plus tard dans AppDelegate.m, la la méthode du délégué est:

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

La sortie NSLog n'apparaît jamais. Le problème me semble être que je ne fais pas correctement référence à l'objet contrôleur de la barre d'onglets qui a été instancié par le storyboard. Comment est-ce que je fais cela?

+0

Avez-vous défini le délégué? Pouvez-vous montrer du code? – Pfitz

+0

Le délégué de la barre d'onglets est défini dans AppDelegate.h: – whawk

+0

Pensez-y que j'ai le même problème. – ingenspor

Répondre

6

Mettez [self setDelegate:self]; dans votre ViewDidLoad ou quelque part où l'objet get initialisés

+0

vous voulez dire que je dois ajouter la méthode ci-dessus dans mon premier ViewController du premier NavigationController de TabBarController? Pouvez-vous s'il vous plaît élaborer votre solution. – Pratik

8

J'ai eu ce problème. Si vous n'utilisez pas de storyboards, il est recommandé de définir le délégué UITabBarController dans le AppDelegate. Cependant, avec Storyboards, le AppDelegate n'a aucune idée de l'endroit où le tabBarController est au démarrage. Vous penseriez par subclassing la tabBarController et en ajoutant la méthode déléguée:

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

} 

... serait suffisant. Mais, ce n'est pas irritant.

J'avais besoin de savoir quand un utilisateur avait appuyé sur un bouton de tabulation. J'avais besoin de savoir cela plus que j'avais besoin de savoir que la méthode "- (void)viewWillDisappear:(BOOL)animated {} " de viewController avait été exécutée.

J'ai décidé de faire de mon UITabBarController un délégué de lui-même. Cela semblait stupide pour moi, mais je l'ai fait ce qui suit ...

#import <UIKit/UIKit.h> 

@interface PlumbsTabBarController : UITabBarController <UITabBarControllerDelegate> 

@end 

Et puis, dans ma méthode viewDidLoad, écrit ce qui suit:

[self setDelegate:self]; 

ce qui a permis l'onglet Mes méthodes de délégué de la barre pour exécuter.

Fou ou quoi?

Ok - j'éditer cette réponse maintenant, car même si l'est avant tout correct, où navigationController est utilisé, sélectionné avec chaque tabBarButton touché, la méthode déléguée didSelectViewController sera, lorsque vous essayez de NSLog(@"%@", viewController); seulement vous montrer que vous avez sélectionné la classe UINavigationController?

Ainsi, la solution totale, juste pour ajouter plus de complexité, est de sous-classe la UINavigationController pour chaque viewController que vous souhaitez surveiller, (faire quelque chose) lorsque le tabBarbutton a été touché.

Cela fonctionne pour moi de toute façon. Et, si quelqu'un peut choisir le dribble ci-dessus, ils pourraient trouver un aspect qui est utile - et cela me suffit - vu que je trouve ce site tout à fait utile aussi.

+0

Merci, votre réponse a fonctionné pour moi. –

+0

Dans mon cas, cette réponse ne fonctionnait que si la méthode 'didSelectViewController' se trouvait également dans le fichier' UITabBarController' plutôt que dans AppDelegate. –

Questions connexes