2009-10-27 5 views
18

Nella mia app per iPhone uso una barra di navigazione colorata e un UIToolbar globale colorato. Nella mia visualizzazione informazioni, ho un pulsante che apre un MFMailComposeViewController e la barra degli strumenti nella parte superiore di quella vista (con il pulsante "cancella" e "invia") è ancora blu. Chiamo il MFMailComposeViewController in questo modo:Modifica colore barra degli strumenti MFMailComposeViewController

-(void)displayMailSheet 
{ 

    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
    picker.mailComposeDelegate = self; 

    [picker setSubject:@"..."]; 

    NSArray *toRecipients = [NSArray arrayWithObject:@"..."]; 

    [picker setToRecipients:toRecipients]; 

    [self presentModalViewController:picker animated:YES]; 
    [picker release]; 

} 

E 'possibile cambiare il colore della barra degli strumenti che di vista? Se è possibile, come posso farlo?

+2

Hai provato impostazione picker.navigationBar.tintColor? –

+0

Funziona bene! Grazie! :-) – iYassin

risposta

39

Qui si va:

[[picker navigationBar] setTintColor:[UIColor blackColor]]; 

per iOS 8,0

[[picker navigationBar] setBarTintColor:[UIColor blackColor]]; 
+0

Grazie per il suggerimento. Era già stato postato come commento sopra, ma ora potrei contrassegnare la domanda come risolta ;-) – iYassin

+2

Per le app iOS 7.0, questo non funziona. Guarda la nota di eggboxderek. –

+0

setTintColor ora modifica i pulsanti della barra in modo da utilizzare normalmente setBarTintColor su un viewcontroller, tuttavia questo non funziona con MFMailComposeViewController. – Leon

-2

dal riferimento MFMailComposeViewController Classe ufficiale:

Importante: L'interfaccia di composizione di posta stesso non è personalizzabile e non deve essere modificato dalla tua applicazione. [...]

Penso che sarebbe una scelta migliore presentare l'interfaccia di composizione della posta di default senza modifiche. Altrimenti Apple potrebbe rifiutare la tua richiesta.

Chiediamo qui se qualcuno ha avuto un'esperienza in questo modo.

+1

Fat Booth riesce a farla franca. –

+0

puoi farlo con globalmente da appdelegate. –

1

Prova questo:

MFMailComposeViewController *mailController = [MFMailComposeViewController new]; 

[mailController.navigationBar setTintColor:[UIColor colorWithHue:240.0f/359.0f 
                 saturation:85.0f/100.0f 
                 brightness:60.0f/100.0f 
                  alpha:0.0f]]; 
12

Un piccolo punto su questa funzionalità sotto iOS7 - la proprietà di colore tinta non influenza più il colore della barra nel suo complesso, invece semplicemente cambia il colore del 'Inviare' e pulsanti 'Annulla' (che, in stile iOS7, sono semplicemente etichette colorate).

Vale la pena notare che se il colore della barra del titolo è stato modificato in bianco o in chiaro, in iOS7 i pulsanti di invio e annullamento non saranno più visibili.

3

Voglio solo sottolineare che il post precedente su Apple che respinge la tua domanda è un vecchio post. Ecco una citazione dalla documentazione MFMailComposeViewController corrente ...

Importante: Il punto di vista della gerarchia di questa classe è privato e non dovete modificarlo. Tuttavia, è possibile personalizzare l'aspetto di un'istanza utilizzando il protocollo UIAppearance.

5

si può fare a livello globale da AppDelegate

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationbar-background.png"] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault]; // MFMailComposeViewController's navigationBar backgroundcolor 

NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], UITextAttributeTextColor, [UIColor whiteColor], UITextAttributeTextShadowColor, nil]; 
[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions];//MFMailComposeViewController's navigationBar text color