IOS7UIBarButton 后退按钮箭头颜色

我正在试图改变后退键箭头

enter image description here

我目前正在使用以下方法来控制文本大小以及后退按钮上的文本颜色:

[[UIBarButtonItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], UITextAttributeTextColor,
[UIFont boldSystemFontOfSize:16.0f], UITextAttributeFont,
[UIColor darkGrayColor], UITextAttributeTextShadowColor,
[NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset,
nil] forState:UIControlStateNormal];

但是如果我只想改变后退按钮的箭头颜色,我应该怎么做?

132081 次浏览

可以在按钮(或按钮条目)或视图控制器的视图上设置 tintColor属性。默认情况下,该属性将从父视图继承色彩,一直到应用程序的顶级 UIWindow

您必须设置整个应用程序的 tintColor。

self.window.tintColor = [UIColor redColor];

或者在 Swift 3中:

self.window?.tintColor = UIColor.blue

资料来源: IOS7用户界面过渡指南

在 iOS6中,tintColor 为导航栏、标签栏、工具栏、搜索栏和范围栏的背景着色。若要在 iOS7中为条形背景着色,请改为使用 barTintColor 属性。

IOS7设计资源 iOS7用户界面过渡指南

要更改特定导航控制器的后退按钮的人字符颜色 * :

self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

* 如果你使用的应用程序有一个以上的导航控制器,你希望这个符号的颜色适用于每个,你可能想使用外观代理设置每个导航控制器的后退按钮符号,如下所示:

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

为了更好地衡量,以迅雷不及掩耳之势(感谢 Jay Mayu 在评论中提到) :

UINavigationBar.appearance().tintColor = UIColor.whiteColor()

您可以使用该方法设置整个应用程序导航栏的颜色

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions{
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}

可以通过这种方式只改变箭头的颜色(不改变后退按钮标题的颜色) :

[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]];

导航栏包含表示箭头的 _ UINavigationBarBackIndicatorView 类型的子视图(子视图数组中的最后一项)。

结果是 带有不同颜色的后退按钮箭头和后退按钮标题的导航栏

在初始化导航控制器的 rootViewController 中,我将这段代码放在 viewDidAppear 方法中:

//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

只要改变 NavigationBar的颜色,你可以设置如下色彩。

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

我不得不两者兼用:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
setTitleTextAttributes:[NSDictionary
dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil]
forState:UIControlStateNormal];


[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor whiteColor]];

为我工作,谢谢大家!

在 iOS7中,你可以在你的 AppDelegate.m文件中的 application:didFinishLaunchingWithOptions:中放入以下代码行:

[[UINavigationBar appearance] setTintColor:myColor];

myColor设置为整个应用程序中后退按钮的颜色。没必要把它放在每个文件里。

如果您正在使用带有箭头图像的 UIButton 制作自定义后退按钮,这里是子类代码片段。 使用它,你可以在代码中创建按钮,也可以在 Interface Builder 中为任何一个 UIButton 分配类。 返回箭头图像将自动添加,并使用文本颜色着色。

@interface UIImage (TintColor)


- (UIImage *)imageWithOverlayColor:(UIColor *)color;


@end




@implementation UIImage (TintColor)


- (UIImage *)imageWithOverlayColor:(UIColor *)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);


if (UIGraphicsBeginImageContextWithOptions) {
CGFloat imageScale = 1.0f;
if ([self respondsToSelector:@selector(scale)])
imageScale = self.scale;
UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale);
}
else {
UIGraphicsBeginImageContext(self.size);
}


[self drawInRect:rect];


CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(context, kCGBlendModeSourceIn);


CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);


UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();


return image;
}


@end








#import "iOS7backButton.h"


@implementation iOS7BackButton


-(void)awakeFromNib
{
[super awakeFromNib];


BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:self.titleLabel.textColor];
[self setImage:backBtnImage forState:UIControlStateNormal];
[self setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
[self setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];




}




+ (UIButton*) buttonWithTitle:(NSString*)btnTitle andTintColor:(UIColor*)color {
BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
UIButton *backBtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 30)];
UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:color];
[backBtn setImage:backBtnImage forState:UIControlStateNormal];
[backBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, is6?5:-5, 0, 0)];
[backBtn setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];
[backBtn setTitle:btnTitle forState:UIControlStateNormal];
[backBtn setTitleColor:color /*#007aff*/ forState:UIControlStateNormal];


return backBtn;
}


@end

back button image@2x

UINavigationBar *nbar = self.navigationController.navigationBar;


if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
//iOS 7
nbar.barTintColor = [UIColor blueColor]; // bar color
//or custom color
//[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];


nbar.navigationBar.translucent = NO;


nbar.tintColor = [UIColor blueColor]; //bar button item color


} else {
//ios 4,5,6
nbar.tintColor = [UIColor whiteColor];
//or custom color
//[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];


}

如果你只想改变整个应用程序的返回箭头,可以这样做:

[[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance]
setTintColor:[UIColor colorWithHexString: @"#f00000"]];

如果你正在使用故事板,你可以设置导航栏的色彩。

enter image description here

enter image description here

Swift 2.0: 着色导航栏及按钮

navigationController?.navigationBar.barTintColor = UIColor.blueColor()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

在快捷3中,更改 UIBarButton 后退按钮箭头颜色

self.navigationController?.navigationBar.tintColor = UIColor.black

更新 Swift 3

navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.yellow
navigationController?.navigationBar.tintColor = UIColor.red
navigationController?.navigationBar.barTintColor = UIColor.gray
navigationController?.navigationBar.titleTextAttributes =  [NSForegroundColorAttributeName: UIColor.blue]

结果: enter image description here