2012-06-11 2 views
0

Я использую раскадровки в xcode с iOS5. У меня есть TabBarController с 6 вкладками. Перед TabController пользователь выбирает тип учетной записи A oR B, если выбран тип B, я хотел бы скрыть одну из вкладок.iOS5 setHidden UITabBarItem вызывает сбой

У меня есть подкласс UITabBarController, и этот кусок кода работает, но его не совсем то, что я хочу.

if (accountType == 2) { 
    [[[[self tabBar] items] objectAtIndex:1] setEnabled:NO]; 
} 

Это делает мою вторую вкладку темные и непригодной, которые в порядке, но я действительно хотел, чтобы это работало ...

[[[[self tabBar] items] objectAtIndex:1] setHidden:YES]; 

Но это вызывает эту ошибку: - [UITabBarItem setHidden]: непризнанные селектор направлен например 0x856f490 * согласующего приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: '- [UITabBarItem setHidden]: непризнанный селектор направлен например 0x856f490'

Есть ли другой способ добиться этого?

ответ

1

Почему не дожидаться инициализации viewBar viewControllers, пока вы не узнаете, какой тип учетной записи выбирает ваш пользователь? Для этого используйте метод setViewControllers:animated:, например. как следует:

if (accountType == 1) { 
    NSArray* controllersForTabBar = [NSArray arrayWithObjects:myVC1,myVC2,myVC3,myVC4,myVC5,myVC6 nil]; 
    [[[self tabBar] setViewControllers:controllersForTabBar] animated:YES]; 
} 
if (accountType == 2) { 
    NSArray* controllersForTabBar = [NSArray arrayWithObjects:myVC1,myVC2,myVC3,myVC4,myVC5, nil]; 
    [[[self tabBar] setViewControllers:controllersForTabBar] animated:YES]; 
} 

Яблочный док для этого метода говорит:

When you assign a new set of view controllers runtime, the tab bar controller removes all of the old view controllers before installing the new ones. When changing the view controllers, the tab bar controller remembers the view controller object that was previously selected and attempts to reselect it. If the selected view controller is no longer present, it attempts to select the view controller at the same index in the array as the previous selection. If that index is invalid, it selects the view controller at index 0.

Что касается сообщений об ошибке: Вы получаете эту ошибку, потому что TabBar не реализует метод setHidden:.

1

d.ennis ответ указал мне в правильном направлении. Нужно немного подстроить его для ios5 с раскадровки ...

// load the storyboard by name 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

if (accountType == 1) { 
    UIViewController *fvc = [storyboard instantiateViewControllerWithIdentifier:@"First"]; 
    UIViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"Second"]; 
} else { 
    UIViewController *fvc = [storyboard instantiateViewControllerWithIdentifier:@"First"]; 
    UIViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"Second"]; 
    UIViewController *tvc = [storyboard instantiateViewControllerWithIdentifier:@"Third"]; 

}  

tabBarController = [[UITabBarController alloc] init]; 
tabBarController.delegate = self; 

NSArray *controllersForTabBar = [NSArray arrayWithObjects: fvc, svc, nil]; 

[tabBarController setViewControllers:controllersForTabBar animated:NO]; 

[self.view addSubview:tabBarController.view]; 
+0

Я понимаю, что код не на 100%, но вы получаете идею :) – Andy

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