当用户选择标签栏项目时,我想要一种不同的背景颜色,而不是取消选择它时。
答案 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标记中。像这样:
答案 2 :(得分:7)
更新:从iOS 7.1开始,此技术不再有效(如果用户连续两次点击相同的标签,则会清除背景颜色。)
UITabBarItem
是UIBarItem
的子类,一切都更痛苦,因为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)
请按照以下步骤操作:
创建UITabBarController
转到viewDidAppear
子类
UITabBarController
现在找到TabBarItem的大小,
UITabBar *tabBar = self.tabBar;
CGSize imgSize = CGSizeMake(tabBar.frame.size.width/tabBar.items.count,tabBar.frame.size.height);
现在创建具有该尺寸的图像
//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();
现在,将此图片分配给TabBar的SelectionIndicatorImage
[tabBar setSelectionIndicatorImage:finalImg];
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)
答案 10 :(得分:0)
快速回答4:
在iOS 8上不推荐使用setSelectedImageTintColor。
而是使用它:
self.tabBar.tintColor = UIColor.white