【问题标题】:iPhone, UITabBarItem: Dynamically change image of a tab bar when app startsiPhone,UITabBarItem:应用程序启动时动态更改标签栏的图像
【发布时间】:2026-02-19 23:50:02
【问题描述】:

当我的应用加载时,我想根据用户上次运行应用时设置的保存设置更改其中一个选项卡上的图像。当用户单击执行该选项卡的 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;   

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

【问题讨论】:

    标签: iphone uitabbaritem


    【解决方案1】:

    我想通了。我只需要调用 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"]];
    

    【讨论】:

      【解决方案2】:

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

      我已经更改了选定的 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"]];
      

      试试吧!!!!

      【讨论】: