Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何以编程方式更改tabbarItem';s形象_Ios_Uitabbar - Fatal编程技术网

Ios 如何以编程方式更改tabbarItem';s形象

Ios 如何以编程方式更改tabbarItem';s形象,ios,uitabbar,Ios,Uitabbar,我正在开发一个购物车标签。最初,我只是使用默认的badge值在底部选项卡栏上显示购物车中有多少物品。现在,设计师想变得花哨,他想根据购物车中的物品数量展示不同的图像。例如,如果有,则显示cartTab-1.png,如果有,则显示cartTab-2.png 我试图更改tabaritem(uitabaritem)的图像,但对我无效。可行吗?我和我的同事讨论过,他说我可能需要自己在tabbarItem上画这个图像。你有什么建议吗?谢谢 更多详情: 我使用InterfaceBuilder创建了tabIt

我正在开发一个购物车标签。最初,我只是使用默认的badge值在底部选项卡栏上显示购物车中有多少物品。现在,设计师想变得花哨,他想根据购物车中的物品数量展示不同的图像。例如,如果有,则显示cartTab-1.png,如果有,则显示cartTab-2.png

我试图更改tabaritem(
uitabaritem
)的图像,但对我无效。可行吗?我和我的同事讨论过,他说我可能需要自己在tabbarItem上画这个图像。你有什么建议吗?谢谢

更多详情:

  • 我使用InterfaceBuilder创建了tabItem,并在那里设置了图像和标题
  • 我需要支持ios4。所以我不能使用SetSelecteImage
  • 在我的例子中,它是一个KVO,如果购物车计数发生变化,它会通知方法更新映像。不在初始化步骤中 有人知道为什么
    [self.tabBarItem setImage:[UIImage imagename:@“cartxxx.png”]
    不起作用吗?调试时,属性确实发生了更改,但UI保持不变

    更新

    下面的代码可以工作。谢谢大家

    UIImage* cartTabImage = [UIImage imageNamed:cartTabImageName];
    [[self.tabBarController.tabBar.items objectAtIndex:3] setImage:cartTabImage];
    

    这个答案可能对你有帮助

      UITabBarItem *i5=[[UITabBarItem alloc]initWithTitle:@"Profile" image:[UIImage imageNamed:@"profile.png"] tag:5];
    
    试试这个:

    int numItems = 0; // count of items in your shopping cart
    NSString *imageName = [NSString stringWithFormat:@"cartTab-%d",numItems];
    
    // change your image
    [[self.tabBar.items objectAtIndex:myIndex] setImage:[UIImage imageNamed:imageName]];
    
    // or, if you want to set it when initializing the tabBar
    UITabBarItem *item = [[[UITabBarItem alloc] initWithTitle:myTitle image:[UIImage imageNamed:imageName] tag:someTag];
    
    当用户选择选项卡时,将显示selectedImage。当用户选择了其他选项卡时,将显示unselectedImage

    视图中加载:
    do

    UIImage *c1 = [UIImage imageNamed:@"cart1.png"];
    UIImage *c2 = [UIImage imageNamed:@"cart1unselected.png"];
    [[self tabBarItem] setFinishedSelectedImage:c1 withFinishedUnselectedImage:c2];
    

    我找到的最简单的方法是

         self.tabBarItem.image=[UIImage imageNamed:@"myImage.png"];
    

    Swift 3.0版本,用于2个选项卡

    self.tabBar.items?[0].image = UIImage(named: "inactive_image_0")?.withRenderingMode(.alwaysOriginal)
    self.tabBar.items?[0].selectedImage = UIImage(named: "active_image_0")?.withRenderingMode(.alwaysOriginal)
    
    self.tabBar.items?[1].image = UIImage(named: "inactive_image_1")?.withRenderingMode(.alwaysOriginal)
    self.tabBar.items?[1].selectedImage = UIImage(named: "active_image_1")?.withRenderingMode(.alwaysOriginal)
    

    如更新的问题和其他答案所述,在大多数情况下,需要通过
    UITabBarController
    直接访问
    UITabBarItem

    iOS似乎创建了
    uitabaritem
    实例的副本,这解释了为什么更新
    self.tabBarItem
    属性不能反映用户界面中的更改:

    我的猜测是,当选项卡栏项是以编程方式创建的,而不是由情节提要创建时,会发生这种情况,但这只是一个猜测

    如前所述,解决方案是通过选项卡栏控制器访问选项卡栏项目数组。此解决方案不好,因为它依赖于选项卡栏项目索引的知识:

    UITabBarItem *tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0];
    [tabBarItem setImage:image];
    [tabBarItem setSelectedImage:image];
    

    不要忘记更新默认状态和选定状态的图像。

    谢谢。事实上,我也做了同样的事情,但是图像没有改变。调试时,tabBarItem的属性将更改为新图像。但由于某些原因,UI没有更新。以下各项均无效:[self.tabBarItem setImage:[UIImage ImageName:@“play.png”];[self.tabBarItem setBadgeValue:@“4”];[self.tabBarItem setTitle:@“测试”];顺便说一句,我是在viewDidLoad中完成的。谢谢,因为我需要支持ios 4,我调用了类似的代码,但它不起作用。[self.tabBarItem setImage:[UIImage ImageName:@“cartxxx.png”];我也不把它称为在视图中。在我的例子中,它是一个KVO,如果购物车计数发生变化,它会通知该方法更新映像。这是一个iOS5方法。如果您需要支持iOS4,那么您必须将uitabar子类化并创建自定义图像代码。。。它很烦人,而且非常长,可能会有很多车。有一些教程介绍如何将自定义映像添加到UITabBarthanks。在我的例子中,它是KVO,如果购物车计数发生变化,它会通知方法更新映像。不在初始化步骤
    self中。tabBarItem
    不一定非空。这不是设置selectedImage,对我来说无法正常工作。withRenderingMode(.alwaysOriginal)确实对我有帮助。
    let favorites = UITabBarItem(title: nil, image:UIImage(named: "Screen Shot 2018-12-13 at 11.00.42 AM") , tag: 0)
    
    UITabBarItem *tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0];
    [tabBarItem setImage:image];
    [tabBarItem setSelectedImage:image];
    
    let favorites = UITabBarItem(title: nil, image:UIImage(named: "Screen Shot 2018-12-13 at 11.00.42 AM") , tag: 0)