Cómo configurar el tinte no seleccionado de UITabBarItem,*** incluidos los elementos del sistema***(iOS7)
uiappearance (6)
¿Estás preparado para algún uso de API privado?
Haga esto en algún momento después de que la barra de pestañas se haya llenado:
for (UIView *v in self.tabBar.subviews)
if ([NSStringFromClass(v.class) isEqual:@"UITabBarButton"])
[v performSelector:@selector(_setUnselectedTintColor:)
withObject:[UIColor whiteColor]];
Se aplican las advertencias habituales sobre la API privada: Apple preferiría que usted no hiciera esto; Si se rompe puedes mantener ambas piezas; etc.
El código de ejemplo no es particularmente sigiloso con respecto a la revisión de la App Store. Apple lo atrapará, tal como se presenta. Añade tus técnicas de sigilo favoritas para adaptarse.
Funciona en al menos iOS 7.0.1 y 7.1.
( NOTA: veo que hay varias preguntas similares sobre SO, pero ninguna de ellas parece abordar mi problema específico de querer cambiar la apariencia no seleccionada de los UITabBarItems personalizados y del sistema).
Estoy trabajando en iOS7. Tengo una UITabBar con algunos botones. Algunos de ellos son mis botones, otros son botones del sistema. Ejemplo:
UITabBarItem *searchButton = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemSearch tag: navSearchItem];
UITabBarItem *bookMkButton = [[UITabBarItem alloc] initWithTabBarSystemItem: UITabBarSystemItemBookmarks tag: navBookmarksItem];
UITabBarItem *homeButton = [[UITabBarItem alloc] initWithTitle: @"Home" image: [self tabBarImageNamed: @"home-tab"] tag: navHomeItem];
UITabBarItem *setingButton = [[UITabBarItem alloc] initWithTitle: @"Settings" image: [self tabBarImageNamed: @"settings-tab"] tag: navSettingsItem];
navTabBar.items = @[ searchButton, homeButton, bookMkButton, setingButton];
Puedo configurar el tinte del botón seleccionado con bastante facilidad, con:
[[UITabBar appearance] setSelectedImageTintColor: MY_FAVORITE_COLOR];
Puedo configurar el color del texto del botón no seleccionado en blanco:
[[UITabBarItem appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], UITextAttributeTextColor, nil]
forState: UIControlStateNormal];
Lo que quiero hacer es configurar el color del tinte de la imagen NO SELECCIONADO en blanco. Podría establecer la imagen no seleccionada con bastante facilidad, pero eso solo funciona para mis botones. Quiero hacer esto para los botones del sistema, también. Es decir, quiero que mis botones de búsqueda y marcadores también se deseleccionen en blanco.
Estoy bastante seguro de que Apple se quejará si intento recrear sus íconos para hacer botones personalizados. Los documentos son bastante específicos de que no debemos hacer nada remotamente parecido a los íconos de Apple.
¿Consejos?
¡Gracias!
EDITAR: la razón por la que quiero unselected = white es que, en comparación con el fondo diseñado, el gris predeterminado hace que los iconos y el texto sean duros para los ojos.
Deberia ser:
[[UITabBar appearance] setTintColor:[UIColor whiteColor]]
Tomado de: iOS Custom UI Series: TabBar & NavBar: http://bit.ly/1ahr9Ao
En iOS 10, UITabBar expone unselectedItemTintColor
que puede utilizar para especificar el tinte de los elementos no seleccionados. Ver los docs para más.
Esto significa que cuando está configurando una barra de pestañas tiene las siguientes opciones de tinte:
-
tintColor
aplica a las pestañas seleccionadas -
unselectedItemTintColor
aplica a todas las pestañas no seleccionadas
La única forma en que tuve éxito al configurar una imagen UITabBarItem no seleccionada personalizada fue usando la siguiente imagen (blanca) y cargándola con un modo de representación específico
UIImage *tabImage = [[UIImage imageNamed:@"white_tab_item"]
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.tabItem.image = tabImage;
"tabItem" es un Outlet UITabBarItem de la clase
Los créditos van a la respuesta de Aaron Brager: UITabBarController no seleccionado icono tinte de imagen
este código para cambiar el color del título del botón de selección
//// definir estos codigos para ios7
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")){
NSLog(@"ios77777");
[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
NSForegroundColorAttributeName : [UIColor redColor]
}
forState:UIControlStateNormal];
}