J'essaie de changer la flèche du bouton de retour
J'utilise actuellement les éléments suivants pour contrôler la taille du texte ainsi que la couleur du texte sur le bouton Précédent:
[[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];
mais si je veux changer uniquement la couleur de la flèche pour le bouton de retour, que dois-je faire?
Pour changer la couleur des chevrons du bouton Précédent d'un contrôleur de navigation spécifique *:
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
* Si vous utilisez une application avec plus d'un contrôleur de navigation et que vous souhaitez que cette couleur en chevron soit appliquée à chacun, vous pouvez utiliser le proxy d'apparence pour définir le chevron du bouton Précédent de chaque contrôleur de navigation, comme suit:
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
Et pour faire bonne mesure, dans Swift (merci à Jay Mayu dans les commentaires):
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
Vous devez définir la teinteCouleur de toute l'application.
self.window.tintColor = [UIColor redColor];
Ou dans Swift 3:
self.window?.tintColor = UIColor.blue
Source: Guide de la transition de l'interface utilisateur iOS 7
Vous pouvez définir la couleur sur la barre de navigation de l'application entière en utilisant la méthode
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions{
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}
Il est possible de changer uniquement la couleur de la flèche (pas la couleur du titre du bouton précédent) de cette manière:
[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]];
La barre de navigation contient la sous-vue du type _UINavigationBarBackIndicatorView (dernier élément du tableau des sous-vues) qui représente une flèche.
Le résultat est barre de navigation avec différentes couleurs de flèche du bouton Précédent et titre du bouton Précédent
Dans le rootViewController qui initialise le navigationController, j'ai placé ce code dans ma méthode 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]];
Dans iOS 6, tintColor a teinté l’arrière-plan des barres de navigation, des barres d’onglet, des barres d’outils, des barres de recherche et des barres d’étendue. Pour teinter un fond de barre dans iOS 7, utilisez plutôt la propriété barTintColor.
Guide de transition de l'interface utilisateur iOS 7 pour les ressources de conception iOS 7
Vous pouvez définir la propriété tintColor
sur le bouton (ou l'élément de bouton à barres) ou sur la vue du contrôleur de vue. Par défaut, la propriété hérite de la teinte de la vue parent, jusqu'au niveau supérieur UIWindow
de votre application.
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];
}
Je devais utiliser les deux:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
setTitleTextAttributes:[NSDictionary
dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil]
forState:UIControlStateNormal];
[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor whiteColor]];
Et travaille pour moi, merci pour tout le monde!
Mettre à jour Swift 3
navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.yellow
navigationController?.navigationBar.tintColor = UIColor.red
navigationController?.navigationBar.barTintColor = UIColor.gray
navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blue]
Si vous souhaitez modifier uniquement la flèche arrière MAIS sur l'ensemble de l'application, procédez comme suit:
[[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance]
setTintColor:[UIColor colorWithHexString: @"#f00000"]];
Juste pour changer la couleur NavigationBar
, vous pouvez définir la couleur de teinte comme ci-dessous.
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
Si vous créez un bouton de retour personnalisé basé sur UIButton avec l’image de la flèche, voici l’extrait de sous-classe. En l'utilisant, vous pouvez créer un bouton dans le code ou simplement affecter une classe dans Interface Builder à n'importe quel UIButton. Flèche Arrière L'image sera ajoutée automatiquement et colorée avec la couleur du texte.
@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
Dans iOS 7, vous pouvez insérer la ligne de code suivante dans application:didFinishLaunchingWithOptions:
dans votre fichier AppDelegate.m
:
[[UINavigationBar appearance] setTintColor:myColor];
Réglez myColor
sur la couleur souhaitée pour le bouton Précédent dans l’ensemble de l’application. Pas besoin de le mettre dans tous les fichiers.
Swift 2.0: Barre de navigation et boutons de coloration
navigationController?.navigationBar.barTintColor = UIColor.blueColor()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Dans Swift 3, pour changer la couleur de la flèche du bouton de retour UIBarButton
self.navigationController?.navigationBar.tintColor = UIColor.black