有没有办法为 UITabBarItem 使用自定义选择的图像?

Posted

技术标签:

【中文标题】有没有办法为 UITabBarItem 使用自定义选择的图像?【英文标题】:Is there a way to use a custom selected image for UITabBarItem? 【发布时间】:2010-08-11 19:04:30 【问题描述】:

当用户在标签栏上选择一个项目时,我喜欢自定义选择的图像,默认情况下它选择蓝色,但希望使用绿色。类似下面的任何想法?

【问题讨论】:

【参考方案1】:

刚刚找到我的解决方案。基本上,我继承了 UITabItem 并将其设置在导航控制器中:

-(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;            

CustomTabBarItem 类如下所示:

@interface CustomTabBarItem : UITabBarItem

    UIImage  *customHighlightedImage;


@property (nonatomic, retain) UIImage *customHighlightedImage;

@end

实现:

#import "CustomTabBarItem.h

@implementation CustomTabBarItem

@synthesize customHighlightedImage;

- (void)dealloc 
    [customHighlightedImage release];
    customHighlightedImage=nil;
    [super dealloc];


-(UIImage *)selectedImage 
    return self.customHighlightedImage;


@end

【讨论】:

什么是customHighlightedImage?你在 CustomTabBarItem 类中放了什么? 刚刚添加了有关 CustomTabBarItem 外观的更多详细信息 我在 UITabBarItem 的文档中的任何地方都看不到 - (UIImage *)selectedImage。不过似乎可行,所以我猜这是“私有 API”,因此对 99% 的项目来说是致命的。 请问未选中图片的处理方法是什么?【参考方案2】:

ios 6 中,我更改了选定的 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"]];

希望对你有帮助。

【讨论】:

这很好用,除了在选择选项卡之前不会设置所选图像(对我来说,第一个选项卡最初仍然是蓝色的)。不过,在我的 UITabBarController 中的 viewDidLoad 中遍历 self.viewControllers 可以解决问题。 我也面临与达斯汀相同的问题。请让我知道如何在不手动选择标签的情况下显示选定或未选定的图像。 我不确定,但你可以试试这行代码。 :- [tabBar setSelectedItem:[tabBar.items objectAtIndex:0]];【参考方案3】:

只需在调用 UITabBarController-delegate-methods 时添加一些自定义视图(使用 insertSubview:atIndex:)。

例子:

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

您可以尝试自己更改someIndex,直到获得您想要的结果。

【讨论】:

这很好,因为它很容易实现,并且不使用任何私有方法,因此在应用审查上不会有问题。【参考方案4】:

这在 SDK 中不受官方支持。您也许可以在运行时探测和调整选项卡的视图,但您可能会被 Apple 拒绝。

编辑:为了完整起见,我应该提到您的另一个选择是推出自己的 UITabBar。

【讨论】:

【参考方案5】:

对于 iOS5 及更高版本,您可以这样做:

rootTabBarController.tabBar.selectedImageTintColor = [UIColor greenColor];

【讨论】:

设置所有图像的色调颜色。我只想要一个标签栏。我该怎么做?【参考方案6】:

我相信你现在可以这样做了:

[[[[self tabBar] items] objectAtIndex:0] setFinishedSelectedImage:nil withFinishedUnselectedImage:nil];

【讨论】:

setFinishedSelectedImage:withFinishedUnselectedImage:UITabBarItem 的方法,而不是UITabBar【参考方案7】:

使用情节提要时,您只需选择 TabBarController 的 TabBar,然后在 Identity Inspector 中更改 Image Tint。这也应该适用于 XIB。

Look here for an image describing the todos

【讨论】:

【参考方案8】:

在 AppDelegate.m 中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions 

[[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]]; 

return YES;


这会给你一个红色,用你想要的白色、蓝色等改变颜色。

【讨论】:

【参考方案9】:

根据 Rizzu 的回答,在我的 UITabBarController 的 viewDidLoad: 中:

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"]];
    

【讨论】:

嗨达斯汀。在我手动选择所需的 UITabBarItem 之前,不会设置我在 UITabBarItem 上的图像。如果您解决了这个问题,请给我一些提示。如果可能的话,请给我代码。

以上是关于有没有办法为 UITabBarItem 使用自定义选择的图像?的主要内容,如果未能解决你的问题,请参考以下文章

使用情节提要创建的没有标题的自定义 UITabbarItem

iOS 7下更改UITabBarItem徽章背景颜色

没有标题标签的自定义 UITabBarItem

如何使用自定义 UIImage 作为 UITabBarItem 徽章?

如何为 UITabBarItem 设置自定义标题属性

创建并初始化自定义 UITabBarItem 类