2011-12-27 7 views
0

Итак, у меня есть UIViewController, который имеет вид UITabBar. Я хочу вытащить JSON и решить, какие вкладки я хочу добавить в панель вкладок, поэтому мне нужно иметь возможность выбирать вкладки во время выполнения. Я хотел использовать метод UITabBarController setViewControllers:animated:, чтобы добавить к нему список контроллеров представлений. Однако, поскольку я делаю это в контроллере представления, я не знаю, как получить доступ к контроллеру представления панели вкладок. Вот мой код ...Добавление UITabBarItem в UITabBar в UIViewController

Заголовок

#import <UIKit/UIKit.h> 

@interface HealthTicketTabController : UIViewController <UITabBarDelegate, UITabBarControllerDelegate> { 
    NSArray *viewControllers; 
    IBOutlet UITabBar *tabBar; 
    UIViewController *selectedViewController; 

    // How do I link this the the tabBar's view controller??? 
    UITabBarController *tabBarController; 
} 

@property (nonatomic, retain) NSArray *viewControllers; 
@property (nonatomic, retain) IBOutlet UITabBar *tabBar; 
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; 
@property (nonatomic, retain) UIViewController *selectedViewController; 

@end 

Источник

- (id)init 
{ 
    self = [super initWithNibName:@"HealthTicketTabView" bundle:nil]; 
    if (self) 
    { 
     //Controllers for the tab view 
     HealthCardController *card = [[HealthCardController alloc] init]; 
     MedicalExpensesController *medical = [[MedicalExpensesController alloc] init]; 

     //Tab bar items to be displayed in the tab bar 
     card.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMostViewed tag:0]; 
     medical.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMostViewed tag:1]; 

     NSArray *array = [[NSArray alloc] initWithObjects:card, medical, nil]; 

     //Set the tab bar's view controllers to the list 
     tabBarController.viewControllers = [NSArray arrayWithObjects:card, medical, nil]; 

     [array release]; 
     [card release]; 
     [medical release]; 
    } 

    return self; 
} 

ответ

1

Обнаружено, что, поскольку я использовал UIViewController для управления UITabBar Мне нужно установить делегат панели вкладок в текущий UIViewController и обработать события табуляции в текущем контроллере.

Добавление TabBarItems к TabBar

[self.tabBar setItems: tabBarItems animated:TRUE]; 

Переключение между ViewControllers

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    UIViewController *temp = [viewControllers objectAtIndex:item.tag]; 
    [self.selectedViewController.view removeFromSuperview]; 
    [self.view addSubview:temp.view]; 
    self.selectedViewController = temp; 
} 
1

UIViewController имеет свойство tabBarController уже. Вам не нужен один в вашем файле заголовка. Таким образом вы можете получить доступ к UITabBarController.

Смежные вопросы