texto tablas para formularios formulario estilos ejemplos ejemplo colores cajas boton ios7 uiactivityviewcontroller

ios7 - tablas - formulario html ejemplo



No se puede establecer el color del texto de los botones Enviar y Cancelar en el compositor de correo cuando se presenta desde el UIActivityViewController en iOS7 (18)

Estoy usando UIActivityViewController para compartir elementos en iOS7. Cuando toco la opción Correo, aparece el autor del correo, pero los botones Cancelar y Enviar de la barra de navegación y la barra de navegación son azules, lo que dificulta su lectura, por lo que deseo cambiar su color. Está funcionando en iOS6 pero no en iOS7.

Lo intenté

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], UITextAttributeTextColor, [UIColor clearColor], UITextAttributeTextShadowColor, nil] forState:UIControlStateNormal];

que funciona en iOS6, y probé

[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]]; [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];

que hace que el color parpadee en rojo la primera vez que se ejecuta la aplicación antes de volver a cambiar inmediatamente al color azul.


Antes de presentar el compositor de correo, inserte esta línea como esta:

[mailComposer.navigationBar setTintColor:[UIColor whiteColor]]; [self presentViewController:mailComposer animated:YES completion:nil];

Aunque configuré el estilo de la barra de estado en la aplicación que terminó de iniciar, también tuve que configurarlo de nuevo en el bloque de finalización como este:

[self presentViewController:mailComposer animated:YES completion:^{[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];}];


Bueno, hay razones por las que no podemos cambiar la forma en que es la UI en el código de Apple. Principalmente porque es de manzana. No le permiten editar el aspecto de la interfaz de usuario en MFMailComposerViewController de ninguna manera. Si hay una manera, entonces no tengo idea al respecto, pero nunca he visto ninguna forma de hacerlo. MFMailComposeViewController no es compatible con el atributo de apariencia, ya que se creó en iOS 3.0, y la apariencia no se convirtió en una cosa hasta iOS 5.0

Aquí hay un enlace a la documentación de Apple MFMailComposeViewController : MFMailComposeViewController

¡Espero que esto ayude!


Color de tinte de barra y color de barra de estado en UIActivityViewController. Solución Swift 3:

extension MFMailComposeViewController { override open func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent } open override func viewDidLoad() { super.viewDidLoad() navigationBar.isTranslucent = false navigationBar.isOpaque = false navigationBar.barTintColor = UIColor.white navigationBar.tintColor = UIColor.white } }


En Swift , en iOS9 , configuración

UINavigationBar.appearance().barTintColor = UIColor.greenColor() // eg UINavigationBar.appearance().translucent = false

antes de presentar el controlador de vista de actividad, el truco fue para mí.


En Swift hice una extensión para UIViewController :

extension UIViewController { func presentActivityViewController(viewControllerToPresent: UIViewController) { self.presentViewController(viewControllerToPresent, animated: true) { _ in UIBarButtonItem.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().barTintColor = Config.primaryColor } } }

Cuando necesito presentar un UIActivityViewController llamo:

let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: []) presentActivityViewController(activityViewController)


Esto es lo que funciona en iOS 7.1 a partir de hoy.

Subclase el UIActivityViewController y anule el siguiente método:

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion { viewControllerToPresent.view.tintColor = [UIColor whiteColor]; [super presentViewController:viewControllerToPresent animated:flag completion:^{ [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; if (completion) { completion(); } }]; }

Esto hará que los botones sean blancos y la barra de estado blanca.


Esto funcionó para mí: en AppDelegate.m en la función:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Ingresé el siguiente código:

//mail composer [[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBarTintColor:myBackgroundColor]; [[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setTintColor:myBarItemsColor];

Funciona bien en iOS7 + iOS8, no probé en versiones más nuevas


Esto parece ser un error con iOS 7. He visto otros informes de esto en línea. Tampoco parece estar solucionado en iOS 7.1.

Para ser específico, no importa lo que haga, no puede establecer colores de tinte en las barras de navegación para los cuadros de diálogo que se muestran desde UIActivityViewController.


No pude lograr que la solución de Alex funcionara, sin embargo, he logrado obtener una variación de la respuesta de Paillou para trabajar, aunque tuve que establecer tanto el barTintColor como los titleTextAttributes en mi situación:

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities]; activityViewController.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToVimeo, UIActivityTypePostToFlickr, UIActivityTypeAirDrop]; [activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) { // back to normal color [[UINavigationBar appearance] setBarTintColor:AAColorInputBorder]; [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Avenir-Medium" size:18], NSFontAttributeName, [UIColor whiteColor], NSForegroundColorAttributeName, nil]]; }]; [self presentViewController:activityViewController animated:YES completion:^{ // change color temporary [[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]]; [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Avenir-Medium" size:18], NSFontAttributeName, AAColorInputBorder, NSForegroundColorAttributeName, nil]];

Gracias Paillou!


Para Swift:

self.navigationController?.presentViewController(activityViewController, animated: true, completion: { () in UIBarButtonItem.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().barTintColor = UIColor.whiteColor() // optional to change bar backgroundColor }

Esto cambiará el color del botón Enviar y cancelar a Blanco (probado en iOS 7,8) pero aún no puedo hacer que el color del texto de la barra de estado sea blanco. (Aunque no he probado la solución Subclase UIActivityViewController para cambiar el color del texto de la barra de estado)


Para ios7 creo que deberías pasar por este código

[[UINavigationBar appearance] setTintColor:[UIColor redColor]];

Si tampoco funciona, intente con la documentación de la manzana Mail Compose View Controller disponible en Internet.


Probé muchos métodos diferentes en iOS 9 y 10, pero este es el único que funcionó. Tenga en cuenta que tengo una imagen de fondo detrás de la barra de navegación también:

[UIApplication.sharedApplication setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; NSDictionary *attribs = @{NSForegroundColorAttributeName:UIColor.whiteColor}; UINavigationBar.appearance.titleTextAttributes = attribs; UINavigationBar.appearance.tintColor = UIColor.whiteColor; [UINavigationBar.appearance setBackgroundImage:[UIImage imageNamed:@"IOSNavigationBar"] forBarMetrics:UIBarMetricsDefault]; UIBarButtonItem.appearance.tintColor = UIColor.whiteColor;


Prueba este código porque puede ser que te ayude

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


Se las UINavigationBar para cambiar el color del texto de los botones Enviar y Cancelar , que están en UINavigationBar en MFMailComposerViewController (tanto Enviar como Cancelar ) y MFMessageComposeViewController (solo Cancelar ), cuando se presentan desde UIActivityViewController .

Usando un UIActivityViewController, toca Message o Mail :

Observará que el color de texto predeterminado de los botones Enviar y Cancelar es azul:

Para cambiar eso, en la clase AppDelegate.m , en el método didFinishLaunchingWithOptions , inserte la siguiente línea:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:[UIColor whiteColor]];

Esto resulta en:

También puede usar otros colores, por ejemplo:

[UIColor purpleColor];

[UIColor greenColor];

¿Cómo lo probé? Me di cuenta de que esta solución funciona para lo siguiente:

  • con Xcode 5.1, en el simulador iOS 7.1, construyendo como iOS SDK base 7.1 (se puede elegir entre seleccionar el archivo del proyecto -> Configuraciones de compilación -> SDK base. También, seleccionado desde General -> Destino de despliegue -> 7.1)
  • con Xcode 5.1, en un iPhone 4, construyendo como base iOS SDK 7.0 (se puede elegir entre seleccionar el archivo de proyecto -> Configuraciones de compilación -> SDK base. También, seleccionado desde General -> Destino de despliegue -> 7.0)
  • con Xcode 5.1, en un iPhone 4, construyendo como base iOS SDK 7.1 (se puede elegir entre seleccionar el archivo de proyecto -> Configuraciones de compilación -> SDK base. También, seleccionado desde General -> Destino de despliegue -> 7.1)

No funcionó cuando se probaba con:

  • con Xcode 5.1, en el simulador iOS 7.0, construyendo como base iOS SDK 7.0 (se puede elegir entre seleccionar el archivo del proyecto -> Configuraciones de compilación -> SDK base. También, seleccionado desde General -> Destino de despliegue -> 7.0)

Por lo tanto, debería ser seguro de usar, ya que creo que el comportamiento en el dispositivo real es más importante que el comportamiento en el simulador de iOS. Si alguien sabe por qué no funciona en el simulador iOS 7.0, me gustaría saberlo. :)


Si desea establecer el color de los botones cancelar y enviar en iOS 7, debe usar esto:

// Change the colours of the buttons in iOS 7 [[UINavigationBar appearance] setTintColor:[UIColor redColor]];

En iOS 6 es de hecho esto y también debes dejar esto en tu código:

// Change the colours of the buttons in iOS 6 [[UIBarButtonItem appearance] setTintColor:[UIColor redColor]]; // Change the color of the the navigation bar in iOS 6 and 7 [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];


Tuve el mismo problema con mi aplicación donde la propiedad UINavigationBar de UINavigationBar es blanca en todas partes gracias al proxy de apariencia. El efecto resultante es que UIBarButtonItem del controlador de vista de correo del controlador navigationBar no estaba visible (botones blancos en una barra de navegación blanca).

Tengo esta llamada en mi application:didFinishLaunchingWithOptions: método:

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

Como es imposible (¿por ahora?) UINavigationBar al UINavigationBar del controlador de vista de compositor de correo en UIActivityViewController , hice la siguiente solución alternativa que está inspirada en la respuesta de Alex:

UIColor *normalColor = [[UINavigationBar appearance] tintColor]; UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:nil]; [activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) { // back to normal color [[UINavigationBar appearance] setTintColor:normalColor]; }]; [self presentViewController:activityViewController animated:YES completion:^{ // change color temporary [[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:232.0f/255.0f green:51.0f/255.0f blue:72.0f/255.0f alpha:1.0f]]; }];

PD: este código está diseñado para iOS 7, pero puedes usar [[UIBarButtonItem appearance] setTintColor:] en iOS 6 (cf respuesta de Kevin van Mierlo)


Tuve un gran problema con esto, especialmente cuando MFMailComposeViewController / MFMessageViewController son ellos mismos visualizados por UIActivityViewController .

Recurrí a usar el método swizzling en viewDidAppear / viewDidDisappear para deshacer y luego rehacer la personalización de colores y fuentes de mi aplicación, con la ayuda de https://github.com/rentzsch/jrswizzle :

SwizzledComposeViewControllers.h

#import <MessageUI/MessageUI.h> @interface MFMailComposeViewController (GMSwizzling) @end @interface MFMessageComposeViewController (GMSwizzling) @end

SwizzledComposeViewControllers.m

#import "SwizzledComposeViewControllers.h" #import "AppDelegate.h" #import "JRSwizzle.h" @implementation MFMailComposeViewController (GMSwizzling) + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self jr_swizzleMethod:@selector(init) withMethod:@selector(gmswizzled_init) error:nil]; [self jr_swizzleMethod:@selector(viewWillAppear:) withMethod:@selector(gmswizzled_viewWillAppear:) error:nil]; [self jr_swizzleMethod:@selector(viewWillDisappear:) withMethod:@selector(gmswizzled_viewWillDisappear:) error:nil]; }); } - (instancetype)gmswizzled_init { [(AppDelegate*)UIApplication.sharedApplication.delegate uncustomiseAppearance]; return [self gmswizzled_init]; } - (void)gmswizzled_viewWillAppear:(BOOL)animated { [(AppDelegate*)UIApplication.sharedApplication.delegate uncustomiseAppearance]; [self gmswizzled_viewWillAppear:animated]; } - (void)gmswizzled_viewWillDisappear:(BOOL)animated { [(AppDelegate*)UIApplication.sharedApplication.delegate customiseAppearance]; [self gmswizzled_viewWillDisappear:animated]; } @end @implementation MFMessageComposeViewController (GMSwizzling) + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self jr_swizzleMethod:@selector(init) withMethod:@selector(gmswizzled_init) error:nil]; [self jr_swizzleMethod:@selector(viewWillAppear:) withMethod:@selector(gmswizzled_viewWillAppear:) error:nil]; [self jr_swizzleMethod:@selector(viewWillDisappear:) withMethod:@selector(gmswizzled_viewWillDisappear:) error:nil]; }); } - (instancetype)gmswizzled_init { [(AppDelegate*)UIApplication.sharedApplication.delegate uncustomiseAppearance]; return [self gmswizzled_init]; } - (void)gmswizzled_viewWillAppear:(BOOL)animated { [(AppDelegate*)UIApplication.sharedApplication.delegate uncustomiseAppearance]; [self gmswizzled_viewWillAppear:animated]; } - (void)gmswizzled_viewWillDisappear:(BOOL)animated { [(AppDelegate*)UIApplication.sharedApplication.delegate customiseAppearance]; [self gmswizzled_viewWillDisappear:animated]; } @end

(Tengo que admitir que no puedo recordar por qué no personalicé las apariencias tanto en init como viewWillAppear , pero estoy bastante seguro de que había una razón ...).


Solucioné mi problema subclasificando UIActivityViewController de esta manera. viewWillAppear viewWilldisapper

extension UIActivityViewController { override open func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UINavigationBar.appearance().barTintColor = .white } open override func viewDidLoad() { super.viewDidLoad() navigationController?.navigationBar.isTranslucent = false navigationController?.navigationBar.isOpaque = false navigationController?.navigationBar.barTintColor = UIColor(red: (247/255), green: (247/255), blue: (247/255), alpha: 1) //navigationBar.tintColor = UIColor.white } open override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(true) UINavigationBar.appearance().barTintColor = mycustomColor } }