UISegmentedControl tintColor

Estoy teniendo problemas para get UISegmentedControl para mostrar el color de tinte deseado.

// AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // need networking tint color in other views of the app [[UIView appearance] setTintColor:[UIColor networkingColor]]; return YES; } // ViewController - (void)viewDidLoad { [super viewDidLoad]; NSArray *items = @[@"Item 1", @"Item 2"]; UISegmentedControl *control = [[UISegmentedControl alloc] initWithItems:items]; // would like to have this control to have a green tint color control.tintColor = [UIColor greenColor]; [self.view addSubview:control]; } 

¿Cómo hacer que UISegmentedControl use el color verde del tinte?

¿Prueba algo como esto?

 for (UIView *subView in mySegmentedControl.subviews) { [subView setTintColor: [UIColor greenColor]]; } 

Pero en realidad parece que es un problema conocido en iOS 7, no sé si se ha solucionado en iOS 8.

"No se puede personalizar el estilo del control segmentado en iOS 7. Los controles segmentados solo tienen un estilo"

Catálogo de interfaz de usuario UIKit

Terminé creando una categoría para el comportamiento deseado. La estructura de subvista se ve así:

 UISegment UISegmentLabel UIImageView UISegment UISegmentLabel UIImageView 

Por lo tanto, se requieren dos loops para el efecto deseado (de lo contrario, algunas partes permanecen en color de tinte antiguo).

UISegmentedControl + TintColor.h

 #import <UIKit/UIKit.h> @interface UISegmentedControl (TintColor) @end 

UISegmentedControl + TintColor.m

 #import "UISegmentedControl+TintColor.h" @implementation UISegmentedControl (TintColor) - (void)setTintColor:(UIColor *)tintColor { [super setTintColor:tintColor]; for (UIView *subview in self.subviews) { subview.tintColor = tintColor; for (UIView *subsubview in subview.subviews) { subsubview.tintColor = tintColor; } } } @end