Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UISegmentedControl selected segment color

Is there any way to customize color of selected segment in UISegmentedControl?

I've found segmentedController.tintColor property, which lets me customize color of the whole segmented control. The problem is, when I select bright color for tintColor property, selected segment becomes almost unrecognizable (its color is almost the same as the rest of segmented control, so its hard to distinguish selected and unselected segments). So I cannot use any good bright colors for segmented control. The solution would be some separate property for selected segment color but I cannot find it. Did anyone solve this?

like image 827
Mike Avatar asked Feb 16 '10 03:02

Mike


People also ask

How do you change the segment control color?

To change the color/font of the selected segment titles, use setTitleTextAttributes with a state of . selected / UIControlStateSelected . If you create a segmented control with images, if the images are created as template images, then the segmented control's tintColor will be used to color the images.

When would you use segmented control?

Use segmented controls to view similar content in different ways and the changes should take effect immediately when a segmented control option is selected. They should never require a user to click a button to apply the settings. Don't use a segmented control for action, such as add and remove.


1 Answers

Here is the absolute simplest way to change the selected segment to any RGB color. No subclassing or hacks required.

segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;  UIColor *newTintColor = [UIColor colorWithRed: 251/255.0 green:175/255.0 blue:93/255.0 alpha:1.0];     segmentedControl.tintColor = newTintColor;  UIColor *newSelectedTintColor = [UIColor colorWithRed: 0/255.0 green:175/255.0 blue:0/255.0 alpha:1.0]; [[[segmentedControl subviews] objectAtIndex:0] setTintColor:newSelectedTintColor]; 

This example shows the important steps:

  1. Sets the control style to "StyleBar", which is required for it to work
  2. Sets the un-selected color for the entire control first to orange
  3. Sets the color of the selected segment to green

Notes:

  • Steps 1 and 2 can be done in interface builder, or in code as shown. However step 3 can only be done in code
  • The color values being set with notation like this "123.0/255.0" is just a way to make the RGB values stand out instead the normalized float values required by UIColor (just ignore it if you like)
like image 189
whitneyland Avatar answered Oct 06 '22 16:10

whitneyland