Is there a way to use a custom selected image for UITabBarItem?

前端 未结 9 1940
滥情空心
滥情空心 2020-12-08 05:52

I like to have a custom selected image when a user selects an item on the tab bar, by default it selects as blue like but would like to have a green color instead. something

相关标签:
9条回答
  • 2020-12-08 06:33

    Just add some custom views (using insertSubview:atIndex:) when the UITabBarController-delegate-methods are called.

    Example:

    – (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
        [tabBarController.tabBar insertSubview:someView atIndex:someIndex];
    }
    

    You can try changing someIndex yourself till you have the result you want.

    0 讨论(0)
  • 2020-12-08 06:37

    In iOS 6 I have change the selected tabbatitem image like -

    in tabbar controller delegate method

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

    through this you can change your image.

    Or you can use directly in your view controllers init(or ViewWillAppear) method, like

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

    i hope this'll help you.

    0 讨论(0)
  • 2020-12-08 06:38

    Just found my solution. Basically, I subclassed UITabItem and set this in the navigation controller:

    -(void) viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
    
        CustomTabBarItem *tabItem = [[CustomTabBarItem alloc] initWithTitle:@"Events" image:[UIImage imageNamed:@"tabIcon.png"] tag:0];
        tabItem.customHighlightedImage=[UIImage imageNamed:@"tabIconSelected.png"];
        self.tabBarItem = tabItem;
        [tabItem release];
        tabItem=nil;            
    }
    

    Here's what the CustomTabBarItem class looks like:

    @interface CustomTabBarItem : UITabBarItem
    {
        UIImage  *customHighlightedImage;
    }
    
    @property (nonatomic, retain) UIImage *customHighlightedImage;
    
    @end
    

    implementation:

    #import "CustomTabBarItem.h
    
    @implementation CustomTabBarItem
    
    @synthesize customHighlightedImage;
    
    - (void)dealloc {
        [customHighlightedImage release];
        customHighlightedImage=nil;
        [super dealloc];
    }
    
    -(UIImage *)selectedImage {
        return self.customHighlightedImage;
    }
    
    @end
    
    0 讨论(0)
  • 2020-12-08 06:38

    I believe you can now do this with :

    [[[[self tabBar] items] objectAtIndex:0] setFinishedSelectedImage:nil withFinishedUnselectedImage:nil];
    
    0 讨论(0)
  • 2020-12-08 06:39

    In my UITabBarController's viewDidLoad:, based on Rizzu's answer:

    for (int i = 0; i < [self.viewControllers count]; i++)
    {
        UIViewController* viewController = [self.viewControllers objectAtIndex:i];
    
        if(i == 0)
        {
            [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"btn_list_all_hover.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"btn_list_all.png"]];
        }
        else if(i == 1)
        {
            [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"btn_settings_hover.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"btn_settings.png"]];
        }
    }
    
    0 讨论(0)
  • 2020-12-08 06:42

    This is not officially supported in the SDK. You may be able to probe and adjust the tab's views at runtime, but you risk a rejection from Apple.

    Edit: For completeness, I should mention that your other option is to roll your own UITabBar.

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