Получение selectedIndex выбранной в данный момент вкладки из контроллера представления

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

Вопрос

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

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

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
Это было полезно?

Решение

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top