Frage

Im Moment habe ich eine iPhone-Anwendung mit einem Tabbar und mehrere Viewcontrollers. Alle Bilder sind in Interface Builder entworfen. Ich möchte die aktuell ausgewählte Index des Tabbar aus dem Viewcontroller erhalten zu können, aber aus irgendeinem Grund dieser Eigenschaft gibt (null).

Ich rief die folgend in der viewDidLoad Funktion meines Viewcontroller:

self.tabBarController.selectedIndex

Was wäre der richtige Weg, dies zu tun?

aktualisiert mit dem Code der AppDelegate Klasse.

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
War es hilfreich?

Lösung

Sie sollten einen Zeiger auf Ihre Tabbar in Ihrer AppDelegate Klasse. Ihre Ansicht hat keine Tabbar, so dass Sie empfangen nil von [self.tabBarController selectedIndex].

Andere Tipps

Ich glaube, ich es habe. Unter Verwendung der folgenden gibt den richtigen Index:

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

Der Grund für die Anwendung stürzt, war die Tatsache, dass ich% @ anstelle von% d in dem NSLog Teil. Ich hätte schwören I% d versuchte vor, seltsam ...

Der Index wird jetzt zurückgegeben, aber nur einmal. Nachdem Sie tippen Sie auf die Registerkarte Abschnitt wird eine Indexnummer zurück, aber wenn Sie einen anderen Abschnitt tippen Sie erneut keine Nummer gedruckt. Wahrscheinlich, weil die Sicht bereits einmal geladen. Gibt es eine Möglichkeit, dies zu umgehen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top