Domanda

Al momento ho un'applicazione per iPhone con una barra delle schede e più viewcontroller. Tutte le viste sono progettate in Interface Builder. Mi piacerebbe essere in grado di ottenere l'indice della tabbar attualmente selezionato dal viewcontroller, ma per qualche ragione questa proprietà restituisce (null).

Ho chiamato quanto segue nella funzione viewDidLoad del mio viewcontroller:

self.tabBarController.selectedIndex

Quale sarebbe il modo corretto per farlo?

Aggiornato con il codice della 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
È stato utile?

Soluzione

Dovresti avere un puntatore alla tua barra delle tab nella classe AppDelegate. La tua vista non ha tabbar, quindi ricevi nulla da [self.tabBarController selectedIndex].

Altri suggerimenti

Penso di averlo. L'uso di quanto segue restituisce l'indice corretto:

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

Il motivo per cui l'applicazione si arrestava in modo anomalo era il fatto che avevo usato% @ anziché% d nella parte NSLog. Avrei potuto giurare di aver provato% d prima, strano ...

L'indice viene ora restituito, ma solo una volta. Dopo aver toccato la sezione della scheda viene restituito un numero indice, ma quando si tocca di nuovo un'altra sezione non viene stampato alcun numero. Probabilmente perché la vista è già stata caricata una volta. C'è un modo per aggirare questo?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top