如何设置UITabBarItem的未选择色调,***包括系统项***(iOS7)

时间:2013-09-26 02:16:28

标签: ios ios7 uitabbaritem uiappearance

注意:我看到SO上有几个类似的问题,但是它们似乎都没有解决我想要更改自定义和系统UITabBarItems的未选择外观的特定问题。)< / p>

我在iOS7工作。我有一个带有一些按钮的UITabBar。其中一些是我的按钮,一些是系统按钮。例如:

UITabBarItem *searchButton = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemSearch    tag: navSearchItem];
UITabBarItem *bookMkButton = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemBookmarks tag: navBookmarksItem];
UITabBarItem *homeButton   = [[UITabBarItem alloc] initWithTitle: @"Home"     image: [self tabBarImageNamed: @"home-tab"]     tag: navHomeItem];
UITabBarItem *setingButton = [[UITabBarItem alloc] initWithTitle: @"Settings" image: [self tabBarImageNamed: @"settings-tab"] tag: navSettingsItem];

navTabBar.items = @[ searchButton, homeButton, bookMkButton, setingButton];

我可以轻松地设置所选按钮的色调,使用:

[[UITabBar appearance] setSelectedImageTintColor: MY_FAVORITE_COLOR];

我可以将未选中的按钮文字颜色设置为白色:

[[UITabBarItem appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], UITextAttributeTextColor, nil]
                                         forState: UIControlStateNormal];

我想要做的是将 UNSELECTED 按钮的图像色调颜色设置为白色。我可以轻松地设置未选择的图像,但这仅适用于我的按钮。我也想为系统按钮执行此操作。也就是说,我想要我的搜索&amp;书签按钮也可以取消选择 - 白色。

如果我尝试重新创建自己的图标来制作自定义按钮,我很确定Apple会抱怨。这些文档非常具体,我们不应该像Apple的图标那样做任何事情。

提示?

谢谢!

编辑:我想要取消选择=白色的原因是,在我设计的背景下,默认灰色会使图标/文字在眼睛上变硬。

6 个答案:

答案 0 :(得分:12)

我成功将自定义未选定的UITabBarItem图像设置为白色的唯一方法是使用以下(白色)图像并使用特定渲染模式加载

UIImage *tabImage = [[UIImage imageNamed:@"white_tab_item"] 
                      imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

self.tabItem.image = tabImage;

“tabItem”是类的UITabBarItem Outlet

致Aaron Brager的答案: UITabBarController unselected icon image tint

答案 1 :(得分:3)

您是否准备使用私有API?

在填充标签栏后的某个时间执行此操作:

for (UIView *v in self.tabBar.subviews)
  if ([NSStringFromClass(v.class) isEqual:@"UITabBarButton"])
    [v performSelector:@selector(_setUnselectedTintColor:)
              withObject:[UIColor whiteColor]];

关于私有API的常见警告适用:Apple宁愿你不要这样做;如果它破了你就得保留两件;等

示例代码在App Store审核方面并不是特别隐蔽。如上所述,Apple将抓住它。添加您喜欢的隐形技术以适应。

至少适用于iOS 7.0.1和7.1。

答案 2 :(得分:2)

在iOS 10中,UITabBar公开unselectedItemTintColor,您可以使用它来指定未选择项目的色调。有关详情,请参阅docs

这意味着在配置标签栏时,您有以下色调选项:

  • tintColor适用于所选标签
  • unselectedItemTintColor适用于所有未选中的标签

答案 3 :(得分:0)

此代码更改选择按钮标题颜色

////为ios7定义这些代码

  #define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion]   compare:v options:NSNumericSearch] == NSOrderedSame)

 #define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)

 #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

 #define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

 #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)





 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")){

   NSLog(@"ios77777");


[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont            fontWithName:@"HelveticaNeue-Bold" size:10.0f],
                                                        NSForegroundColorAttributeName :   [UIColor redColor]



 }

      forState:UIControlStateNormal];

    }

答案 4 :(得分:0)

如果您正在使用Storyboard,则还可以为Image设置Bar Item,为Selected Image设置Selected Bar Item,以便在tabBar中获得未更改的图片。

答案 5 :(得分:-4)

应该是:

[[UITabBar appearance] setTintColor:[UIColor whiteColor]]

取自:iOS自定义UI系列:TabBar&amp;导航栏:http://bit.ly/1ahr9Ao