2010-11-26 3 views
1

Когда приложение загружается, я хочу изменить изображение на одной из вкладок на основе сохраненной настройки, установленной пользователем при последнем запуске приложения. Я могу изменить изображение, когда пользователь нажимает на вкладку, которая выполняет метод ViewDidLoad в представлении viewController. см ниже:iPhone, UITabBarItem: динамическое изменение изображения панели вкладок при запуске приложения

UITabBarItem *tabItem; 
if (condition = YES) { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter plus.png"] tag:self.view.tag]; 
} 
else { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter.png"] tag:self.view.tag]; 
} 
self.navigationController.tabBarItem = tabItem; 
[tabItem release]; 
[super viewDidLoad]; 

Но я не смог понять, как получить доступ и изменить UITabBarItem этой вкладки в контроллере представления корневой части приложения при загрузке. См. Метод viewdidload для контроллера корневого представления ниже.

UITabBarItem *tabItem; 
if (condition = YES) { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter plus.png"] tag:self.view.tag]; 
} 
else { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter.png"] tag:self.view.tag]; 
} 
// get the view controller of the tab I want to change 
MyViewController *vc = [self.tabBarController.viewControllers objectAtIndex:2]; 
ft.tabBarItem = tabItem; 
[tabItem release]; 
[super viewDidLoad]; 

Когда это не сработало, я пробовал несколько других способов доступа и изменения uitabbaritem, но ничего не работало. Я попытался создать IBOutLets в корневом представлении контроллера UITabBarItem и UINavigationController.

// tb is an iboutlet to the UITabBarItem 
self.tb = tabItem; 

// nc is an iboutlet to the UINavigationController 
self.nc.tabBarItem = tabItem; 

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

ответ

2

Я понял. Мне просто нужно было вызвать метод setImage для UITabBarItem.

//UITabBarItem *filterTab = [self.tabBar.items objectAtIndex:2]; 
if (condition == YES) { 
    [[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter plus.png"]]; 
    // [filterTab setImage:[UIImage imageNamed:@"filter plus.png"]];   
} 
else { 
    [[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter.png"]]; 
    //[filterTab setImage:[UIImage imageNamed:@"filter.png"]]; 
} 

Развейте вопрос: есть причина или преимущество присвоения tabbaritem указателя первого и затем установить изображение?

UITabBarItem *filterTab = [self.tabBar.items objectAtIndex:2]; 
[filterTab setImage:[UIImage imageNamed:@"filter plus.png"]]; 

по сравнению с его выполнением в одной строке кода следующим образом:

[[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter.png"]]; 
+1

Главное преимущество заключается в том, что он упрощает чтение кода. – 2010-11-27 00:53:50

1

Я думаю, вы должны попробовать это, надеюсь, что это поможет,

меня изменить выбранный tabbatitem изображение как -

в контроллер TabBar метод делегата

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

{ 
    if([tabBarController selectedIndex] == 0) 
    { 
     [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 
    }  
} 

благодаря этому вы можете изменить свой образ.

Или вы можете использовать непосредственно в вид контроллеров инициализации (или ViewWillAppear) метод, как

 [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 

Попробуйте !!!!

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