UITabBar not showing selected item images in ios 7

后端 未结 20 1623
我在风中等你
我在风中等你 2020-11-29 18:36

The icons show fine in ios 6 but not in ios 7. I\'m setting the selected state in the viewController viewDidLoad method. When the user selects a tab bar item the image disap

相关标签:
20条回答
  • 2020-11-29 19:04

    Here is a Swift solution for Swift-Guys :)

    class CustomTabBar: UITabBar {
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
    
            let btnNames = ["Title1", "Title2", "Title3", "Title4"]
    
            for (item, name) in zip(items!, btnNames) {
                item.image = UIImage(named: "bar\(name)Btn")?.imageWithRenderingMode(.AlwaysOriginal)
                item.selectedImage = UIImage(named: "bar\(name)SelectedBtn")?.imageWithRenderingMode(.AlwaysOriginal)
                item.title = name
                item.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor()], forState: .Normal)
                item.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState: .Selected)
            }
        }
    
    }
    

    What is exactly going on here:

    • Make array of btn titles and consider image file names to match them
    • Make For loop over tab bar items and just created btn titles array
    • Set barButtonItem's image and its selectedImage from the array
    • Set title text from the array
    • Set title text color for states .Normal and .Selected

    Setting text colors part is important if you don't want to keep the item's title color gray for .Normal and blue for .Selected, as it is by default. This is often actual when you consider custom images for tab bar items.

    0 讨论(0)
  • 2020-11-29 19:05

    Try this:

    UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-Small-50.png"] tag:100];
    UITabBarItem *item2 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"image-50.png"] tag:200];
    UITabBarItem *item3 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-clip-50.png"] tag:300];
    UITabBarItem *item4 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-color-50.png"] tag:400];
    UITabBarItem *item5 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-lock-50.png"] tag:500];
    
    [item1 setSelectedImage:[[UIImage imageNamed:@"Icon-Small-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item1 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    
    [item2 setSelectedImage:[[UIImage imageNamed:@"image-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item2 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    
    [item3 setSelectedImage:[[UIImage imageNamed:@"Icon-clip-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item3 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    
    [item4 setSelectedImage:[[UIImage imageNamed:@"Icon-color-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item4 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    
    [item5 setSelectedImage:[[UIImage imageNamed:@"Icon-lock-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [item5 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    
    item1.image = [[UIImage imageNamed:@"Icon-Small-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
    item2.image = [[UIImage imageNamed:@"image-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
    item3.image = [[UIImage imageNamed:@"Icon-clip-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    item4.image = [[UIImage imageNamed:@"Icon-color-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    item5.image = [[UIImage imageNamed:@"Icon-lock-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
    0 讨论(0)
  • 2020-11-29 19:08

    You should write to the function:

    UIImage* tab_image = [UIImage imageNamed:@"tab_image.png"];
    UIImage* tab_image_selected = [UIImage imageNamed:@"tab_image_selected.png"];
    
    tab_image = [tab_image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    tab_image_selected = [tab_image_selected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
    self.tabBarItem.image = tab_image;
    self.tabBarItem.selectedImage = tab_image_selected;
    

    I hope this helps

    0 讨论(0)
  • 2020-11-29 19:09

    In your first view controller's .h file, I added the following: @property (weak, nonatomic) IBOutlet UITabBarItem *mapViewTabBarItem; @property (weak, nonatomic) IBOutlet UITabBarItem *profileViewTabBarItem; @property (weak, nonatomic) IBOutlet UITabBarItem *notificationViewTabBarItem;

    (note that the mapViewTabBarItem was linked by ctrl dragging the actual tab bar item into the list of property declarations at the top of the .h file)

    Next, in the same view controller's .m file in the viewDidLoad, add the following:

    self.tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0];
    _mapViewTabBarItem.selectedImage = [[UIImage imageNamed:@"@2x-map-icon-selected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    self.tabBarItem.image = [[UIImage imageNamed:@"@2x-map-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    
    _profileViewTabBarItem = [self.tabBarController.tabBar.items objectAtIndex:1];
    _profileViewTabBarItem.selectedImage = [[UIImage imageNamed:@"@2x-profile-icon-selected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    _profileViewTabBarItem.image = [[UIImage imageNamed:@"@2x-profile-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    
    _notificationViewTabBarItem = [self.tabBarController.tabBar.items objectAtIndex:2];
    _notificationViewTabBarItem.selectedImage = [[UIImage imageNamed:@"@2x-notifications-icon-selected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    _notificationViewTabBarItem.image = [[UIImage imageNamed:@"@2x-notifications-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    
    0 讨论(0)
  • 2020-11-29 19:09

    It is easy and clean solution of category for UITabBar Items.

    Just create category and use the Runtime Attribute and refer it from category like below. Add Runtime Attribute for selected TabBarItem Refer it from category and make changes

    #import "UITabBarItem+CustomTabBar.h"
    
    @implementation UITabBarItem (CustomTabBar)
    
    -(void)setValue:(id)value forKey:(NSString *)key {
        if([key isEqualToString:@"tabtitle"]){
            if([value isEqualToString:@"contacts"]) {
                [self setSelectedImage:[[UIImage imageNamed:@"contacts-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
            } else if([value isEqualToString:@"chat"]) {
                [self setSelectedImage:[[UIImage imageNamed:@"chat-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
            } else if([value isEqualToString:@"groupchat"]) {
                [self setSelectedImage:[[UIImage imageNamed:@"groupchat-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
            } else if([value isEqualToString:@"settings"]) {
                [self setSelectedImage:[[UIImage imageNamed:@"settings-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
            }
        }
        [self setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Roboto-Regular" size:12.0f], NSFontAttributeName, [UIColor grayColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];
    }
    
    @end
    
    0 讨论(0)
  • 2020-11-29 19:10

    No answers helped fixing this issue. The main reason is that my TabBarController wasn't my RootViewController.

    The solution I used for Storyboards, and I just clicked my UITabButton and I added a runtime attribute for selectedImage:

    For each of the different views associated with the UITabController.

    0 讨论(0)
提交回复
热议问题