ios - guide - Reemplace la propiedad UIAppearance para MFMailComposeViewController
ios tutorial by apple (3)
Cambiar la apariencia de un MFMailComposer a través de medidas normales no es posible, pero hay una pequeña solución que puede hacer, que he usado muchas veces antes.
Agregue dos métodos a la clase en la que desea implementar el nuevo aspecto para:
- (void)applyComposerInterfaceApperance
{
[[UINavigationBar appearance] setTintColor:[UIColor blueColor]];
}
- (void)applyGlobalInterfaceAppearance
{
// My default color of choice
[[UINavigationBar appearance] setTintColor:[UIColor redColor]];
}
Ahora, en tu método de show, aplica los cambios especiales de la interfaz del compositor que te gustaría hacer.
- (void)showMailComposer
{
if ([MFMailComposeViewController canSendMail])
{
[self applyComposerInterfaceApperance];
MFMailComposeViewController *viewController = [[MFMailComposeViewController alloc] init];
viewController.mailComposeDelegate = delegate;
[viewController setToRecipients:mailRecepients];
[viewController setSubject:mailSubject];
[viewController setMessageBody:messageBody isHTML:NO];
[self presentModalViewController:viewController animated:YES];
}
}
Y en tu delegado, cambia la interfaz de nuevo a la forma en que estaba.
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
// Do normal mail composer did finish stuff in here
[self applyGlobalInterfaceAppearance];
}
Estoy utilizando el protocolo UIAppearance para establecer la imagen de fondo de los objetos UINavigationBar en mi aplicación
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"image-name"] forBarMetrics:UIBarMetricsDefault];
Me gustaría anular esto para las instancias de MFMailComposeViewController para que se muestre la barra de navegación de estilo predeterminada. Intenté utilizar apariencia cuando se estableció para configurar esto y esto funciona en iOS 5 pero no en iOS 6.
[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
¿Estoy cometiendo un error o hay una mejor manera de lograr esto?
La vista de Mail Composer se ejecuta en un proceso diferente en iOS 6 y no puede manipularse directamente (ya que la vista está esencialmente dentro de otra aplicación). No puede personalizar lo que muestra, es lo mismo para las vistas de Twitter y Facebook.
Aquí hay una descripción más detallada de los controladores de vista remotos: http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/
Simplemente configure el tintColor en la instancia de MFMailComposeViewController:
[mailInstance.navigationBar setTintColor:[UIColor someColor]];