Iphone – UISegmentedControl Color in a UIToolbar

iphoneuisegmentedcontroluitoolbar

My question revolves around the distinction of a UISegmentedController on a UINavigationBar vs a UIToolbar. If I drop a UISegmentedControl into a navigation bar as follows:

navigationBar.barStyle = UIBarStyleBlackTranslucent;

all is well. The UISegmentedControl identifies the selected option with a slightly darker black. But, if I drop a UISegmentedControl onto a UIToolbar, it doesn't pick up the color or translucency from the toolbar. If I manually set the tintColor the UISegmentedControl doesn't distinguish between selected and unselected anymore.

Admittedly, one must wrap the UISegmentedControl in a UIBarButtonItem before dropping onto a UIToolbar. I am wondering if that is part of the reason the UISegmentedControl looks incorrect (blue on a translucent black background).

toolbar.barStyle = UIBarStyleBlackTranslucent;
UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:segmentedControl]; 
NSArray *toolbarItems = [[NSArray alloc] initWithObjects:item,nil];
toolbar.items = toolbarItems;

Granted, my code is not EXACTLY as written since I am using the internal navigation and controller toolbar but the general logic is the same. I'm not sure how to make the UISegmentedControl on the UIToolbar have a black translucent style – maintaining an obvious distinction between selected and unselected segments.

Best Solution

Seems like: segmentedController.tintColor = [UIColor darkGrayColor]; solves your problem.

To remove the "dependency", subclass UISegmentedControl and set the tint in the constructor.

CustomSegmentedControl.m

- (id)initWithItems:(NSArray*)items {
    if( self = [super initWithItems:items] ) {
         self.tintColor = [UIColor darkGrayColor];
    }
    return self;
}