programming learn framework development desarrollador cuenta app ios cocoa-touch ios7 uisegmentedcontrol uiappearance

learn - ¿Cómo cambiar el color del borde UISegmentedControl en iOS7?



learn ios (3)


¿Cómo cambio el color del borde del controlador segmentado en iOS7 sin cambiar el color del texto?


Sería ideal si pudiera mantener la línea entre los segmentos tal como está (es decir, el mismo color que el texto), pero si un cambio de color en el borde implica un cambio de esta línea, también estaría bien.

Tenga en cuenta también que el texto (y las líneas entre segmentos) tienen el color que se establece con
[segmCtrl setTintColor:choosenTintColor]


Así que resolví el problema yo mismo. Mi solución le da al borde del control segmentado otro color, nada más.

Para cambiar solo el color del borde del control segmentado, coloco otro control segmentado sobre el anterior. Deshabilité la interacción del usuario para este nuevo, y configuré la imagen para el segmento seleccionado en nil .

UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 40)]; // Header view for my main view UISegmentedControl *subCat = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Segm 1", @"Segm 2", @"Segm 3", @"Segm 4", nil]]; // The UISegmentedController which I want to change color for [subCat setFrame:CGRectMake(5, 5, [UIScreen mainScreen].bounds.size.width - 10, 30)]; [subCat setSelectedSegmentIndex:0]; UISegmentedControl *bcg = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@" ", @" ", @" ", @" ", nil]]; // The UISegmentedController I put on top of the other one UIColor *subColor = [UIColor redColor]; [subCat setTintColor:subColor]; [bcg setFrame:CGRectMake(5, 5, [UIScreen mainScreen].bounds.size.width - 10, 30)]; [bcg setTintColor:[UIColor greenColor]]; [bcg setUserInteractionEnabled:NO]; [bcg setSelectedSegmentIndex:0]; [bcg setImage:nil forSegmentAtIndex:0]; // Removing highlight color [header addSubview:subCat]; [header addSubview:bcg]; [[self view] addSubview:header];


La respuesta vinculada sí responde a tu pregunta, pero tienes que leer entre líneas. Aquí hay un ejemplo más claro para cambiar todos los estilos de control segmentados dentro de la aplicación:

// Sets the tint color which typically sets the color of the segment images, text, dividers, // borders, and selected segment. A translucent version of this color is also used to tint a // segment when it is pressed and transitioning to being selected, as shown on the first // segment below. [[UISegmentedControl appearance] setTintColor:[UIColor blackColor]]; // The attributes dictionary can specify the font, text color, text shadow color, and text // shadow offset for the title in the text attributes dictionary [[UISegmentedControl appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateNormal];

Para un control dentro de la aplicación:

// Sets the tint color which typically sets the color of the segment images, text, dividers, // borders, and selected segment. A translucent version of this color is also used to tint a // segment when it is pressed and transitioning to being selected, as shown on the first // segment below. self.segControl.tintColor = [UIColor blackColor]; // The attributes dictionary can specify the font, text color, text shadow color, and text // shadow offset for the title in the text attributes dictionary [self.segControl setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateNormal];

Más información aquí: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/UIKitUICatalog/UISegmentedControl.html


Resuelvo poner en viewWillAppear mySegmentControl.selectedIndex para todos los elementos. Por lo tanto, el color del tinte aparece para todos los segmentos. Por supuesto, después de seleccionar Todos los elementos, vuelva a seleccionar su elemento predeterminado.