2013-06-27 2 views
0

я создал панель вкладок элементов в первом контроллереКак передать значение индекса вкладки из UITabBarController в UIViewController

UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
tabBarController.delegate = self; 
tabBarController.view.frame = CGRectMake(0, 0, 320, 460); 

StageViewController *stageViewRegular = [[StageViewController alloc] init]; 
[stageViewRegular setTitle:@"Regular"]; 
stageViewRegular.tabBarItem.tag = 1; 

StageViewController *stageViewAdvanced = [[StageViewController alloc] init]; 
[stageViewAdvanced setTitle:@"Advanced"]; 
stageViewAdvanced.tabBarItem.tag = 2; 

NSArray* controllersArray = [NSArray arrayWithObjects:stageViewRegular, stageViewAdvanced, nil]; 
tabBarController.viewControllers = controllersArray; 

tabBarController.selectedIndex = 0; 
[self.view addSubview:tabBarController.view]; 

и я хочу передать tabBarItem.tag к контроллерам, как упоминалось выше

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    chooseLevel = viewController.tabBarItem.tag; 
} 

но во втором контроллере

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    NSLog(@"%d", chooseLevel); 
} 

chooseLevel всегда записать старое значение. Если я нажимаю первую вкладку, а затем нажимаю вторую вкладку, значение в selectLevel равно 1, а не 2.

Кто-нибудь знает, как ее решить?

+0

я нашел два ViewControllers доступа viewDidLoad первым, а затем получить значение я прохожу. Но до сих пор не знаю, как решить. –

+0

Попробуйте - (BOOL) tabBarController: (UITabBarController *) tbController shouldSelectViewController: (UIViewController *) viewController { return YES; } – stosha

+0

спасибо за ваш ответ, но он не работает. возможно, я должен сначала передать значение, а затем нажать на другое представление. –

ответ

0

Выполните следующие шаги:

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    // Override point for customization after application launch. 
    UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease]; 
    viewController1.tabBarItem.tag = 0; 
    UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease]; 
    viewController2.tabBarItem.tag = 1; 
    self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 
    self.tabBarController.viewControllers = @[viewController1, viewController2]; 
    self.window.rootViewController = self.tabBarController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

FirstViewController.m

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    NSLog(@"%d",self.tabBarItem.tag); 
} 

SecondViewController.m

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    NSLog(@"%d",self.tabBarItem.tag); 
} 

Выход:

2013-06-27 18: 13: 03.913 sampletabs [3981: C07] 0

2013-06 -27 18: 13: 05.282 sampletabs [3981: c07] 1

Спасибо, позвольте мне Знаете, это работает для вас?

+0

ОК, я создаю новый проект, используя свой ответ, и он работает. Но как мне создать этот tabBarController во втором представлении и передать сообщения на третий просмотр? –

+0

, пожалуйста, подробно расскажите об этом ... – sagarcool89

+0

Наконец, я просто создаю три новых контроллера для его решения. Спасибо за вашу помощь. –

0
You can use selected index property like this: 

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    chooseLevel = tabBarController.selected index; 
} 
0
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    int selectedtag=self.tabBarController.selectedIndex; 
    NSLog(@"%d", selectedtag); 
} 
+0

Я пробовал ваш, но все равно получаю старый индекс –

0

ли это:

RootViewController.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
    tabBarController.delegate = self; 
    tabBarController.view.frame = CGRectMake(0, 0, 320, 460); 

    FirstViewController *stageViewRegular = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
    [stageViewRegular setTitle:@"First"]; 
    stageViewRegular.tabBarItem.tag = 1; 

    SecondViewController *stageViewAdvanced = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    [stageViewAdvanced setTitle:@"Second"]; 
    stageViewAdvanced.tabBarItem.tag = 2; 

    NSArray* controllersArray = [NSArray arrayWithObjects:stageViewRegular, stageViewAdvanced, nil]; 
    tabBarController.viewControllers = controllersArray; 

    tabBarController.selectedIndex = 0; 
    [self.view addSubview:tabBarController.view]; 
} 

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    NSLog(@"%d",viewController.tabBarItem.tag); 
} 

FirstViewController

-(void)viewWillAppear:(BOOL)animated 
{ 
    NSLog(@"viewWillAppear %d",self.tabBarItem.tag); 
} 

SecondViewController

Если вам нужно Глобальное значение выбранной вкладки Индекс, то создайте свойство readWrite в AppDelegate и установите значение в RootViewController или First/SecondViewController. Вы получите глобальное значение SelectLevel.

Спасибо,