web-dev-qa-db-fra.com

Bouton retour de la flèche du bouton iOS 7 UIBarButton

J'essaie de changer la flèche du bouton de retour

enter image description here

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?

172
kevinl

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()
438
DiscDev

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

57
Bart van Kuik

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]];
}
55
David Castro

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

23
selmad

Si vous utilisez des storyboards, vous pouvez définir la couleur de la teinte de la barre de navigation.

enter image description here

enter image description here

22
ThE uSeFuL

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]];
11
John Riselvato

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

7
Chamath Jeevan

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.

6
Mike Weller
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];

}
5
Salim

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!

5
Márcia Silva

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]

Résultat: enter image description here

4
Ricardo Mutti

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"]];
3
orkenstein

Juste pour changer la couleur NavigationBar, vous pouvez définir la couleur de teinte comme ci-dessous.

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
3
Khash Nejad

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

back button image@2x

3
Eugene Braginets

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.

2
Geo1088

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()]
0
chinnuabhi

Dans Swift 3, pour changer la couleur de la flèche du bouton de retour UIBarButton

self.navigationController?.navigationBar.tintColor = UIColor.black
0
Dilip Jangid