UISegmentedControl solo cambia el color del text al revisar ViewController

ACTUALIZADO RESPONDIDO POR MI.

Actualmente tengo problemas con el cambio de color del text de mi UISegmentedControl ; Necesita cambiar la primera carga con UIControlStateSelected . El código funciona, pero solo de manera condicional. Funciona cuando visita la página con el control segmentado en la barra de navigation, presiona el button Atrás y luego vuelve a visitar la página. Estoy asumiendo que hay un problema con la inheritance aquí. Dejame explicar..

La location del control segmentado se encuentra en la parte superior de mi barra de navigation.

Herencia del ViewController que contiene el SegmentedControl : TabBarViewController (administrado con AppDelegate) -> controller de navigation -> ViewController (donde se encuentra 'inviteSegBar')

Aquí está el código dentro de AppDelegate.m:

 [[UINavigationBar appearance] setBarTintColor:[UIColor colorWithHexString:@"#669900"]];//this one sets it green. [[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]]; 

Y aquí está el viewDidLoad: código para el VC que contiene 'inviteSegBar', el UISegmentedControl en cuestión:

 - (void)viewDidLoad { [super viewDidLoad]; //CUSTOM APPEARANCE <below> self.navigationController.navigationBar.barTintColor = [UIColor whiteColor]; self.navigationController.navigationBar.tintColor = [UIColor colorWithHexString:@"#669900"]; inviteSegBar.tintColor = [UIColor colorWithHexString:@"#333333"]; [[UISegmentedControl appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor colorWithHexString:@"#669900"]} forState:UIControlStateSelected]; } 

Como dije, la última línea funciona, pero solo cuando vuelves a visitar la página. ¿Por qué está pasando esto?

PD: Este es el mismo problema, chicos, ya había probado este código antes de que apareciera alguna de las respuestas.

RESPUESTA ENCONTRADA: simplemente mueve

 [[UISegmentedControl appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor colorWithHexString:@"#669900"]} forState:UIControlStateSelected]; 

a su file AppDelegate.m

Utilizar

 UIColor *whitecolor = [UIColor whiteColor]; NSDictionary *attributes = [NSDictionary dictionaryWithObjects:@[whitecolor] forKeys:@[UITextAttributeTextColor]]; [yourSegment setTitleTextAttributes:attributes forState:UIControlStateNormal]; UIColor *grayColor = [UIColor darkGrayColor]; NSDictionary *attributes = [NSDictionary dictionaryWithObjects:@[grayColor] forKeys:@[UITextAttributeTextColor]]; [yourSegment setTitleTextAttributes:attributes forState:UIControlStateSelected]; 

actualizar

 UIColor *whitecolor = [UIColor whiteColor]; NSDictionary *attributes = [NSDictionary dictionaryWithObjects:@[whitecolor] forKeys:@[NSForegroundColorAttributeName]]; [yourSegment setTitleTextAttributes:attributes forState:UIControlStateNormal]; UIColor *grayColor = [UIColor darkGrayColor]; NSDictionary *attributes = [NSDictionary dictionaryWithObjects:@[grayColor] forKeys:@[NSForegroundColorAttributeName]]; [yourSegment setTitleTextAttributes:attributes forState:UIControlStateSelected]; 

Este código le permite establecer algunos attributes de text para la label en el control segmentado:

 NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor blackColor], UITextAttributeTextColor, nil]; [_segmentedControl setTitleTextAttributes:attributes forState:UIControlStateSelected]; 

Más attributes permitidos en la documentation de Apple: enlace

Esto puede ayudarle a:

UIAppresentance proxy para establecer attributes de text de título pero preserva tintColor para bordes.

 [[UISegmentedControl appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor networkingColor] } forState:UIControlStateNormal]; 

Para cambiar el aspecto UISegmentedControl inserte, por ejemplo, en viewDidLoad, use este código:

 // color selected text ---> networking [[UISegmentedControl appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor networkingColor] } forState:UIControlStateSelected]; // color disabled text ---> blue [[UISegmentedControl appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor blueColor] } forState:UIControlStateNormal]; // color tint segmented control ---> black [[UISegmentedControl appearance] setTintColor:[UIColor greenColor]];