Cambiar el color del Tinte de UIBarButtonItem


Tengo un proyecto usando Storyboards y cada vez que presiono un controlador de vista con un segue, el elemento de botón de barra creado dinámicamente siempre es azul.

introduzca la descripción de la imagen aquí

Me está volviendo loco. Debido a que este objeto se crea dinámicamente, no puedo establecer su color en IB (como he hecho con los elementos anteriores del botón de la barra).

Entre las soluciones que he probado están:

  1. Ponlo en el viewDidLoad
  2. Establecer en el receptor viewDidAppear

    self.navigationItem.backBarButtonItem.tintColor = [UIColor whiteColor];

  3. Cuando vi que no funcionaba del todo, intenté configurar el leftBarButtonItem en su lugar:

self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor];

  1. He probado el siguiente código (que obtuve de otras respuestas SO) en el delegado de mi aplicación, cuando se llama a la nueva vista, y antes de empujar la nueva vista:

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

Todas las respuestas de Google que he encontrado recomiendan usar el código anterior, pero no funciona para mí. Tal vez hay ¿algunos cambios en la API de apariencia de iOS 7? No importa cómo o dónde intente establecer "Categorías" en blanco, siempre es el azul predeterminado.

Author: hgwhittle, 2013-10-22

6 answers

En iOS 7, para establecer el color de todos los barButtonItems de tu app, establece la propiedad tintColor en la ventana de la aplicación en AppDelegate.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window.tintColor = [UIColor whiteColor];
    return YES;
}

Información más detallada en La Guía de transición de la interfaz de usuario de iOS 7 de Apple (Específicamente en la sección 'Usar color de tinte`).

***O***

Basado en algunos de los comentarios, también puede lograr esto con el proxy de apariencia UINavigationBar. Esto afectará el color tint de solo UIBarButtonItems, a diferencia de la configuración el color Tint en la ventana y que afecta a todas las subviews de esa ventana.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if([UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) {
        [UINavigationBar appearance].tintColor = [UIColor whiteColor];
    }

    return YES;
}
 82
Author: hgwhittle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-02 16:15:11

Creo que está buscando una propiedad de su UINavigationBar. Intenta establecer self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Consulte la sección "Apariencia de las barras de navegación": https://developer.apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UINavigationBar.html#//apple_ref/doc/uid/TP40012857-UINavigationBar-SW1

 21
Author: Yuriy Panfyorov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-21 20:57:42

En Swift 3.0

let navigationBarAppearnce = UINavigationBar.appearance()

Una barra de navegación tintColor afecta el color de la imagen del indicador de retroceso, los títulos de los botones y las imágenes de los botones.

navigationBarAppearnce.barTintColor = UIColor(red: 0.180, green: 0.459, blue: 0.733, alpha: 1.00)

La propiedad barTintColor afecta el color de la propia barra

navigationBarAppearnce.tintColor = UIColor.white

Código final

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

 let navigationBarAppearnce = UINavigationBar.appearance()

 navigationBarAppearnce.barTintColor = UIColor(red: 0.180, green: 0.459, blue: 0.733, alpha: 1.00)

 navigationBarAppearnce.tintColor = UIColor.white

 navigationBarAppearnce.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

 //Change status bar color
 UIApplication.shared.statusBarStyle = .lightContent

 return true
}

introduzca la descripción de la imagen aquí

 9
Author: Ashok R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-04 18:10:42

En iOS 8 si cambiaste el color de tinte de UIView para algún propósito, por ejemplo para la marca UIAlertView, el color de tinte para UIBarButtonItem en UIToolbar también cambió de esa manera. Para arreglar esto, simplemente escriba este código

[UIView appearance].tintColor = SOME_COLOR;
[UIView appearanceWhenContainedIn:[UIToolbar class], nil].tintColor = BLACK_COLOR;

Para el color UIBarButtonItem tint en UINavigationBar use el método estándar

[UINavigationBar appearance].tintColor = BLACK_COLOR;
 1
Author: FunkyKat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-17 12:26:37
UITabBar.appearance().tintColor = UIColor.yellowColor()
 0
Author: user2643679,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-03 12:03:56

Para cambiar el color de un elemento específico (por ejemplo, un botón) en la barra de navegación: En el Objetivo-C

myButton.tintColor = [UIColor redColor];
 0
Author: Vette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-29 23:21:43