web-dev-qa-db-fra.com

Image personnalisée pour le bouton de retour UINavigation dans iOS 7

J'ai un UIBarButtonItem personnalisé avec une image qui fonctionne bien dans iOS 6.1. Mais iOS 7 a un tintColor et il superpose cette couleur sur mon image. Si je mets tintColor à [UIColor clearColor] le bouton n'apparaît pas tous ensemble.

Comment puis-je faire apparaître mon bouton de retour dans iOS 7 comme dans iOS 6? Veuillez aider?

iOS 6.1

iOS 7

35
Majid

Essayez de définir UIBarButtonItem comme ceci dans ios7: -

UIImage *temp = [[UIImage imageNamed:@"theImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];    
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:temp style:UIBarButtonItemStyleBordered target:self action:@selector(action)];

Voici un article original dans Apple Dev center Forums de discussion

Pour prendre en charge à la fois la version iOS7 et la version inférieure, vous cochez system-version et définissez le code comme: -

UIImage *temp=nil;

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{ 
    temp = [UIImage imageNamed:@"btn-back.png"]; 
}
else
{ 
    temp = [[UIImage imageNamed:@"btn-back.png"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];
 }
23
Nitin Gohel

Vous devez utiliser l'apparence sur UINavigationBar pour définir globalement le bouton de retour personnalisé.

[UINavigationBar appearance].backIndicatorImage = customBackButton;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = customBackButton;
42
Johannes

Ce qui suit semble avoir un peu plus de sens pour les personnes qui ne veulent pas jouer avec l'action cible existante, etc. Il suffit de copier-coller. Cela oblige également iOS à utiliser votre image avec tous ses flairs - au lieu d'utiliser simplement un modèle/impression de l'image.

- (void)setCustomNavigationBackButton
{
    UIImage *backBtn = [UIImage imageNamed:@"arrow"];
    backBtn = [backBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.navigationItem.backBarButtonItem.title=@"";
    self.navigationController.navigationBar.backIndicatorImage = backBtn;
    self.navigationController.navigationBar.backIndicatorTransitionMaskImage = backBtn;
}

arrow est le nom de votre image.

20
learner

Version Swift:

var backBtn = UIImage(named: "return_menu")
backBtn = backBtn?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

self.navigationController!.navigationBar.backIndicatorImage = backBtn;
self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = backBtn;
7
Bill Chan

Essayez-le de cette façon:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationController.navigationBar.backIndicatorImage = [UIImage imageNamed:@"yourImageName.png"];
self.navigationController.navigationBar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"yourImageName.png"];

Cela créera un masque d'image dans la couleur de teinte globale qui vous donnera votre propre icône personnalisée. Ne fonctionne pas pour les images en couleur.

6
Rob Phillips

// AJOUTER UNE IMAGE AU BOUTON

UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
[refreshButton setFrame:CGRectMake(0,0,30,30)];
refreshButton.userInteractionEnabled = YES;
[refreshButton setImage:[UIImage imageNamed:@"yourimage.jpg"] forState:UIControlStateNormal];

// ASSIGNING THE BUTTON WITH IMAGE TO BACK BAR BUTTON

UIBarButtonItem *refreshBarButton = [[[UIBarButtonItem alloc] initWithCustomView:refreshButton] autorelease];
self.navigationItem.leftBarButtonItem = refreshBarButton;
0
Funny