1

当我的应用程序加载时,我想根据用户上次运行应用程序时设置的保存设置更改其中一个选项卡上的图像。当用户单击执行该选项卡的 viewcontroller 的 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];
}
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 但没有任何效果。我尝试在 UITabBarItem 和 UINavigationController 的根视图控制器中创建 IBOutLets。

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

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

无济于事。知道怎么做吗?

4

2 回答 2

2

我想到了。我只需要调用 UITabBarItem 的 setImage 方法。

//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"]];
于 2010-11-26T22:00:16.267 回答
1

我认为你需要尝试这个,希望这会有所帮助,

我已经更改了选定的 tabbatitem 图像,例如 -

在标签栏控制器委托方法中

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

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

通过这个你可以改变你的形象。

或者您可以直接在视图控制器中使用 init(或 ViewWillAppear)方法,例如

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

试试看!!!!

于 2013-02-28T11:05:38.480 回答