当用户选择标签栏项目时,我想要与未选择时不同的背景颜色。
11 回答
把这个放在Appdelegate.m
里面application didFinishLaunchingWithOptions
UIImage *whiteBackground = [UIImage imageNamed:@"whiteBackground"];
[[UITabBar appearance] setSelectionIndicatorImage:whiteBackground];
如果您使用情节提要或 xibs,请单击“选项卡栏”并将“selectedImageTintColor”路径添加到 Key Path Attributes 标记中。像这样 :
更新:从 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 有一个视图属性,但它没有公开。我们可以扩展类来访问它,然后在selected
属性上创建一个自定义设置器来更改背景颜色,如下所示:
#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);
}
在斯威夫特
UITabBar.appearance().selectionIndicatorImage = UIImage(named: "tabSelected")
带有tabSelected@2x.png
尺寸为 98x98 像素的图像
请按照以下步骤操作:
创建子类
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];
斯威夫特 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
我的回答类似于@Mehul Thakkar,但它在Swift 4中,为了改进他的回答,我想说,如果你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
功能如下:
//image with color and size
func imageWithColor(color: UIColor, size: CGSize) -> UIImage {
let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context!.setFillColor(color.cgColor)
context!.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
希望这可以帮助某人。
请参考以下网址。
希望对你有帮助..
试试这个来改变标签栏项目的颜色,但它只适用于 ios5。
if ([UITabBar instancesRespondToSelector:@selector(setSelectedImageTintColor:)])
{
[tabBarController.tabBar setSelectedImageTintColor:[UIColor redColor]];
}
您可以使用 tintcolor。
[[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]];
在 AppDelegate.m 中,将以下代码放在 // 应用程序启动后自定义覆盖点之后。
把它放在你的 AppDelegate.m 文件中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[UITabBar appearance].selectionIndicatorImage = [UIImage imageNamed:@"activeTabBackgroundImage"];
return YES;
}
迅速回答4:
在 iOS 8 上不推荐使用 setSelectedImageTintColor。
而是使用这个:
self.tabBar.tintColor = UIColor.white