如何选择项目时如何更改UITabItem的背景颜色

时间:2013-07-26 10:31:02

标签: ios objective-c uitabbarcontroller uitabbar

当用户选择标签栏项目时,我想要一种不同的背景颜色,而不是取消选择它时。

11 个答案:

答案 0 :(得分:23)

将其放入Appdelegate.m

中的application didFinishLaunchingWithOptions
UIImage *whiteBackground = [UIImage imageNamed:@"whiteBackground"];
[[UITabBar appearance] setSelectionIndicatorImage:whiteBackground];

答案 1 :(得分:11)

如果您使用storyboard或xibs,请单击“Tab Bar”并将“selectedImageTintColor”路径添加到Key Path Attributes标记中。像这样:

enter image description here

答案 2 :(得分:7)

更新:从iOS 7.1开始,此技术不再有效(如果用户连续两次点击相同的标签,则会清除背景颜色。)


UITabBarItemUIBarItem的子类,一切都更痛苦,因为UIBarItem不是UIView的子类;但是,UITabBarItem 包含一个。以下内容操纵该视图,因此如果提交给AppStore可能会被拒绝。

1)子类UITabBarItem

创建UITabBarItem的子类,并在其标题中添加一个新的selected属性,如下所示:

@interface ALDTabBarItem : UITabBarItem
@property (nonatomic, assign, getter = isSelected) BOOL selected;
@end

UITabBarItems有一个view属性,但它没有公开。我们可以扩展类来访问它,然后在selected属性上创建一个自定义setter来更改背景颜色,如下所示:

#import "ALDTabBarItem.h"

@interface ALDTabBarItem (ALD)
@property (nonatomic, strong) UIView *view;
@end

@implementation ALDTabBarItem

- (void)setSelected:(BOOL)selected
{
    if(selected)
        self.view.backgroundColor = [UIColor redColor];
    else
        self.view.backgroundColor = [UIColor clearColor];
} 

@end

2)更新您的UITabBarController代理

将以下代码添加到UITabBarController的委托中,该委托设置UITabBar的选定状态:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    for(ALDTabBarItem *myItem in tabBar.items)
        myItem.selected = (myItem == item);
}

答案 3 :(得分:7)

在Swift中

UITabBar.appearance().selectionIndicatorImage = UIImage(named: "tabSelected")

图片tabSelected@2x.png,尺寸为98x98像素

答案 4 :(得分:4)

请按照以下步骤操作:

  1. 创建UITabBarController

  2. 的子类
  3. 转到viewDidAppear子类

  4. UITabBarController
  5. 现在找到TabBarItem的大小,

    UITabBar *tabBar = self.tabBar;
    CGSize imgSize = CGSizeMake(tabBar.frame.size.width/tabBar.items.count,tabBar.frame.size.height);
    
  6. 现在创建具有该尺寸的图像

    //Create Image
    UIGraphicsBeginImageContextWithOptions(imgSize, NO, 0);
    UIBezierPath* p =
    [UIBezierPath bezierPathWithRect:CGRectMake(0,0,imgSize.width,imgSize.height)];
    [[UIColor blueColor] setFill];
    [p fill];
    UIImage* finalImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
  7. 现在,将此图片分配给TabBar的SelectionIndicatorImage

    [tabBar setSelectionIndicatorImage:finalImg];
    
  8. Swift 4版本:

    let imgSize = CGSize(width: tabBar.frame.size.width / CGFloat(tabBar.items!.count),
                         height: tabBar.frame.size.height)
    UIGraphicsBeginImageContextWithOptions(imgSize, false, 0)
    let p = UIBezierPath(rect: CGRect(x: 0, y: 0, width: imgSize.width,
                                      height: imgSize.height))
    UIColor.blue.setFill()
    p.fill()
    let finalImg = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    UITabBar.appearance().selectionIndicatorImage = finalImg
    

答案 5 :(得分:2)

我的回答类似于 @Mehul Thakkar ,但它在 Swift 4 中并且为了改进他的回答我会说如果你把代码放在{{1因为他建议用户会看到发生的变化,这不是良好的用户体验。

因此,为{tab}控制器和viewDidAppear创建自定义类 放置以下代码:

viewDidLoad

let singleTabWidth: CGFloat = self.tabBar.frame.size.width / CGFloat((self.tabBar.items?.count)!) let singleTabSize = CGSize(width:singleTabWidth , height: self.tabBar.frame.size.height) let selectedTabBackgroundImage: UIImage = self.imageWithColor(color: .white, size: singleTabSize) self.tabBar.selectionIndicatorImage = selectedTabBackgroundImage 功能如下:

imageWithColor

希望这有助于某人。

答案 6 :(得分:1)

请参阅以下网址。

Changing Tint / Background color of UITabBar

How To Change Tab bar color in Xcode

希望这会对你有帮助..

尝试此操作以更改标签栏项目颜色,但它仅适用于ios5。

if ([UITabBar instancesRespondToSelector:@selector(setSelectedImageTintColor:)])
{
    [tabBarController.tabBar setSelectedImageTintColor:[UIColor redColor]];
}

答案 7 :(得分:0)

您可以使用tintcolor。

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

在AppDelegate.m中,将以下代码放在//覆盖点以便在应用程序启动后进行自定义。

答案 8 :(得分:0)

将它放在AppDelegate.m文件中:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
            // Override point for customization after application launch.

            [UITabBar appearance].selectionIndicatorImage = [UIImage imageNamed:@"activeTabBackgroundImage"];


            return YES;
        }

答案 9 :(得分:0)

目前在Xcode 8.3.2中,您可以使用代表实际背景的图像在故事板中完成。

选择标签栏控制器中的标签栏:

enter image description here

在Utilities内选择Attributes Inspector并更改选择背景图像:

enter image description here

答案 10 :(得分:0)

快速回答4:

在iOS 8上不推荐使用

setSelectedImageTintColor。

而是使用它:

self.tabBar.tintColor = UIColor.white

相关问题