Obtention de selectedIndex de l'onglet actuellement sélectionné à partir d'un contrôleur de vue

StackOverflow https://stackoverflow.com/questions/1630323

Question

Je possède actuellement une application iPhone avec une barre de tabulation et plusieurs contrôleurs de vue. Toutes les vues sont conçues dans Interface Builder. J'aimerais pouvoir obtenir l'index actuellement sélectionné de la barre d'onglets à partir du viewcontroller, mais pour une raison quelconque, cette propriété renvoie (null).

J'ai appelé ce qui suit dans la fonction viewDidLoad de mon contrôleur de vue:

self.tabBarController.selectedIndex

Quelle serait la bonne façon de faire cela?

Mis à jour avec le code de la classe AppDelegate.

MyAppDelegate.h

#import <UIKit/UIKit.h>

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
  UIWindow *window;
  UITabBarController *tabBarController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@end

MyAppDelegate.m:

#import "MyAppDelegate.h"

@implementation MyAppDelegate

@synthesize window, tabBarController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
  [window addSubview:tabBarController.view];
}

- (void)dealloc {
    [tabBarController release];
    [window release];
    [super dealloc];
}

@end
Était-ce utile?

La solution

Vous devriez avoir un pointeur sur votre barre d’onglet dans votre classe appDelegate. Votre vue n’a pas de barre de tabulation, vous recevez donc nil de [self.tabBarController selectedIndex].

Autres conseils

Je pense que je l'ai. L'utilisation de ce qui suit renvoie le bon index:

  MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"%d", appDelegate.tabBarController.selectedIndex);

La raison pour laquelle l'application se bloquait était le fait que j'avais utilisé% @ au lieu de% d dans la partie NSLog. J'aurais juré avoir essayé% d auparavant, étrange ...

L'index est maintenant renvoyé, mais une seule fois. Après avoir appuyé sur l'onglet, un numéro d'index est renvoyé, mais lorsque vous appuyez à nouveau sur une autre section, aucun numéro n'est imprimé. Probablement parce que la vue a déjà été chargée une fois. Y a-t-il un moyen de contourner ce problème?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top