戻るボタンの矢印を変更しようとしています
現在、次のボタンを使用して、テキストサイズと戻るボタンのテキストカラーを制御しています。
[[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];
しかし、戻るボタンの矢印の色だけを変えたいのなら、どうすればいいですか。
特定のナビゲーションコントローラの戻るボタンのシェブロンカラーを変更するには*:
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
*複数のナビゲーションコントローラを持つアプリケーションを使用していて、それぞれにこのシェブロンカラーを適用する場合は、次のように、外観プロキシを使用してすべてのナビゲーションコントローラに戻るボタンのシェブロンを設定することができます。
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
それに、Swiftでは、(良い点として、Jay Mayuのコメントに感謝します)
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
アプリ全体のtintColorを設定する必要があります。
self.window.tintColor = [UIColor redColor];
またはSwift 3では:
self.window?.tintColor = UIColor.blue
出典: iOS 7 UI移行ガイド
メソッドを使用してアプリナビゲーションのバー全体に色を設定できます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions{
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}
このようにして、矢印の色だけを変更することができます。
[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]];
ナビゲーションバーには、矢印を表す_UINavigationBarBackIndicatorViewタイプのサブビュー(サブビュー配列の最後の項目)が含まれています。
NavigationControllerを初期化する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]];
IOS 6では、tintColorはナビゲーションバー、タブバー、ツールバー、検索バー、およびスコープバーの背景を着色しました。 iOS 7でバーの背景を着色するには、代わりにbarTintColorプロパティを使用してください。
ボタン(またはバーボタン項目)またはView ControllerのビューにtintColor
プロパティを設定できます。デフォルトでは、プロパティは親ビューからティントを継承します。これは、アプリケーションの最上位レベルのUIWindow
までです。
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];
}
私は両方を使わなければなりませんでした:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
setTitleTextAttributes:[NSDictionary
dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil]
forState:UIControlStateNormal];
[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor whiteColor]];
そして私のために働く、みんなにありがとう!
あなたが全体のアプリで戻る矢印BUTだけを変更したいならば、これをしてください:
[[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance]
setTintColor:[UIColor colorWithHexString: @"#f00000"]];
Swift 3をアップデートします
navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.yellow
navigationController?.navigationBar.tintColor = UIColor.red
navigationController?.navigationBar.barTintColor = UIColor.gray
navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blue]
NavigationBar
の色を変えるためだけに、以下のように色合いを設定することができます。
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
あなたが矢印の画像で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
IOS 7では、application:didFinishLaunchingWithOptions:
ファイルのAppDelegate.m
内に次のコード行を追加できます。
[[UINavigationBar appearance] setTintColor:myColor];
myColor
を、戻るボタンをアプリ全体に表示する色に設定します。すべてのファイルに入れる必要はありません。
Swift 2.0:カラーリングナビゲーションバーとボタン
navigationController?.navigationBar.barTintColor = UIColor.blueColor()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Swift 3では、UIBarButtonの戻るボタンの矢印の色を変更する
self.navigationController?.navigationBar.tintColor = UIColor.black