tutorial guide development developer desarrollador apple app ios objective-c cocoa-touch ios6 uiappearance

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]];