2009-10-27 22 views
18

Estoy usando una barra de navegación teñida y una UIToolbar global tintada en mi aplicación de iPhone. En mi vista de información, tengo un botón que abre un MFMailComposeViewController, y la barra de herramientas en la parte superior de esa vista (con el botón "cancelar" y "enviar") sigue siendo azul. Voy a llamar al MFMailComposeViewController así:Cambiando el color de la barra de herramientas de 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]; 

} 

¿Es posible cambiar el color de la barra de herramientas de ese punto de vista? Si es posible, ¿cómo puedo hacer esto?

+2

¿Ha intentado fijar picker.navigationBar.tintColor? –

+0

¡Esto funciona bien! ¡Gracias! :-) – iYassin

Respuesta

39

Aquí van:

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

para iOS 8,0

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

Gracias por la sugerencia. Ya se publicó como un comentario anterior, pero ahora podría marcar la pregunta como resuelta ;-) – iYassin

+2

Para las aplicaciones iOS 7.0, esto no funciona. Mira la nota de eggboxderek. –

+0

setTintColor ahora cambia los botones de la barra por lo que normalmente usaría setBarTintColor en un controlador de vista, sin embargo, esto no funciona para el MFMailComposeViewController. – Leon

-2

De la referencia oficial MFMailComposeViewController Clase:

Importante: La propia interfaz de composición mail no es personalizable y no debe ser modificado por su aplicación. [...]

Creo que sería una mejor opción que presenta la interfaz de composición de correo predeterminada sin ningún cambio. De lo contrario, Apple puede rechazar su solicitud.

Preguntemos aquí si alguien tuvo una experiencia de esta manera.

+1

Fat Booth logra salirse con la suya. –

+0

puedes hacerlo globalmente desde appdelegate. –

1

Prueba esto:

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 punto menor sobre esta funcionalidad bajo iOS7 - la propiedad color de la tinta ya no afecta al color de la barra en su conjunto, sino que simplemente cambia el color de la 'Enviar' y los botones 'Cancelar' (que, en el estilo iOS7, son simplemente etiquetas tintadas).

Vale la pena señalar si ha cambiado el color de la barra de título a blanco o transparente, ya que en iOS7 los botones de enviar y cancelar ya no estarán visibles.

3

Solo quiero enfatizar que la publicación anterior sobre que Apple rechaza su aplicación es una publicación anterior. Aquí es una cita de la documentación MFMailComposeViewController actual ...

Importante: La vista de jerarquía de esta clase es privado y no se debe modificar. Sin embargo, puede personalizar la apariencia de una instancia utilizando el protocolo UIAppearance.

5

puede hacerlo a nivel mundial desde 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 
Cuestiones relacionadas