Получение selectedIndex текущей выбранной вкладки из viewcontroller - PullRequest
3 голосов
/ 27 октября 2009

В настоящее время у меня есть приложение для iPhone с панелью вкладок и несколькими контроллерами просмотра. Все виды разработаны в Интерфейсном Разработчике. Я хотел бы иметь возможность получить текущий выбранный индекс панели вкладок из viewcontroller, но по некоторым причинам это свойство возвращает (null).

Я вызвал следующее в функции viewDidLoad моего viewcontroller:

self.tabBarController.selectedIndex

Как правильно это сделать?

Обновлен кодом класса 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

Ответы [ 2 ]

4 голосов
/ 27 октября 2009

У вас должен быть указатель на панель вкладок в вашем классе appDelegate. Ваше представление не имеет вкладки, поэтому вы получаете ноль из [self.tabBarController selectedIndex].

0 голосов
/ 27 октября 2009

Я думаю, что понял. Использование следующего возвращает правильный индекс:

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

Причиной сбоя приложения был тот факт, что я использовал% @ вместо% d в части NSLog. Я мог бы поклясться, что пытался% d раньше, странно ...

Индекс теперь возвращается, но только один раз. После того, как вы нажмете на вкладку, возвращается индексный номер, но при повторном нажатии на другой раздел номер не печатается. Возможно, потому что вид уже был загружен один раз. Есть ли способ обойти это?

...