2014-11-10 5 views
14

Come mai l'icona info.png rimane blu e non viene fornita con il colore originale di quell'immagine? Sto usando il seguente codice qui sotto:UIBarButtonItem l'immagine rimane blu e non il colore originale dell'immagine?

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"info.png"] 
                      style:UIBarButtonItemStylePlain 
                      target:self 
                      action:@selector(info:)]; 
+0

È probabile che il colore Tinta sul controller della vista sia impostato sul blu predefinito. – brandonscript

+0

Questa è la cosa, non settaggio affatto un tintcolor, anche non su Appdelegate.m – Jan

+1

È pronto per l'uso. Devi disinserirlo. – brandonscript

risposta

2

Perché il colore del barButtonItems nella vostra applicazione è legata alla proprietà tintColor sulla finestra dell'applicazione.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window.tintColor = [UIColor redColor]; 
    return YES; 
} 
+0

Questo renderà il colore rosso, se lo imposto a zero restituirà nuovamente il colore blu. – Jan

+4

Provare a istanziare l'immagine in questo modo: 'UIImage * image = [[UIImage imageNamed: @" myImage.png "] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];' – carlodurso

36

Per impostazione predefinita, l'immagine in voci dei tasti bar del UINavigationBar è reso utilizza la modalità modello. Puoi impostarlo su originale.

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"info.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
                     style:UIBarButtonItemStylePlain 
                     target:self 
                     action:@selector(info:)]; 
+0

Grazie, il parametro di rendering mi aiuta! =) – Nubaslon

+0

C'è un altro modo? Come un tipo speciale di immagine che non richiede l'impostazione di 'UIImageRenderingModeAlwaysOriginal'? –

+0

Soluzione fantastica per il mio problema ... Grazie mille –

1

Ok, ho capito ... Ho impostato l'immagine al suo stato originale prima.

UIImage *image = [[UIImage imageNamed:@"info.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:image 
                      style:UIBarButtonItemStylePlain 
                      target:self 
                      action:@selector(info:)]; 
+0

Questo è chiaramente spiegato nel documento Apple, "Barre degli strumenti": Icone elemento pulsante barra Qualsiasi pulsante della barra in una barra degli strumenti può avere un'immagine personalizzata anziché testo. È possibile fornire questa immagine alla voce del pulsante della barra durante l'inizializzazione. Tieni presente che un'immagine del pulsante barra verrà automaticamente visualizzata come immagine modello all'interno di una barra degli strumenti, a meno che non imposti esplicitamente la modalità di rendering su UIImageRenderingModeAlwaysOriginal. Per ulteriori informazioni, vedere Immagini dei modelli. – rdelmar

6

Per Swift 2.1+ sarebbe simile a questa:

let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) 

o semplicemente

let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(.AlwaysOriginal) 
+0

C'è un altro modo? Come un tipo speciale di immagine che non richiede l'impostazione di 'UIImageRenderingModeAlwaysOriginal'? –

+1

non afaik - è una limitazione della classe dei pulsanti della barra –

0

Modificare il pulsante della barra di colore oggetto tinta dallo storyboard. O colore dall'immagine nello storyboard.

Il colore dovrebbe essere il colore previsto come esadecimale o rgb.

7

Swift 3:

let image : UIImage? = UIImage.init(named: "heart.png")!.withRenderingMode(.alwaysOriginal) 
1

È possibile che da attività pure. Vai a Assets.xcassets >> Seleziona l'immagine che viene utilizzata come immagine di un oggetto barbutton. Tocca l'ispettore attributi nel riquadro laterale destro. Scegli il rendering come immagine originale. Sarà predefinito in precedenza. Ora vedrai un'immagine colorata.