iPhone, UITabBarItem: динамически изменять изображение панели вкладок при запуске приложения - PullRequest
1 голос
/ 26 ноября 2010

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

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 ]

2 голосов
/ 27 ноября 2010

Я понял это. Мне просто нужно было вызвать метод 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"]];
}

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

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 голос
/ 28 февраля 2013

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

Я изменил выбранное изображение tabbatitem как -

в методе делегата контроллера табуляции

- (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"]];

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

...