set title color for UIButton when highlighted iOS 7
Shouldn't you be using UIControlStateSelected?
Okay, I just tried this out myself it don't want to work well.
You need to set your button style to Custom. The UIButton system style does a lot of things that you can't change. The highlighted button state defaults to its own implementation which is a lighter version if your tintcolor.
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitleColor:self.view.tintColor forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
That should get you the white text background.
Adam Langsner
Updated on December 09, 2020Comments
-
Adam Langsner over 3 years
I have the following code in a viewController, all the outlets and action are hooked up correctly. the
WHITE
andPURPLE
are UIColors that I've defined constants for. I've also set theUIWindow
'stintColor
toPURPLE
and that propagates down to the button.- (void)viewDidLoad { [super viewDidLoad]; [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; button.backgroundColor = WHITE; button.layer.borderWidth = 1.0; button.layer.masksToBounds = YES; button.layer.cornerRadius = 5.0; button.layer.borderColor = PURPLE.CGColor; } -(IBAction) buttonTouchDown:(id)sender { button.backgroundColor = PURPLE; button.layer.borderColor = WHITE.CGColor; } -(IBAction) buttonTouchUpOutside:(id)sender { button.backgroundColor = WHITE; button.layer.borderColor = PURPLE.CGColor; } -(IBAction) buttonTouchUpInside:(id)sender { button.backgroundColor = WHITE; button.layer.borderColor = PURPLE.CGColor; }
When I click the button the text doesn't go white like i told it to in
viewDidLoad
here's some screenshots that I could've cropped better! As you can see in the highlighted state it's not white but like a white and purple mix. Will I need to use
UIButtonTypeCustom
? I heard if I do that I won't get the advantages of iOS 7 doing its magic withtintColor
. Not sure what's the correct way to go about this. Thanks in advance. -
greenisus over 10 yearsYou shouldn't need to use
UIControlStateSelected
becauseUIButton
does not have that state.UIControlStateSelected
is for things like the selected tab of aUISegmentedControl
. -
David Wong over 10 years@greenisus please note that UIButton, UISegmentedControl and other UIKit classes inherit off UIControl which has selected state. Both Interface Builder and code support the visual changes made using UIControlStateSelected UIControlStateDisabled, etc. Great thing about UIControl's selected property is calling isSelected from the button and allowing the button to handle the boolean property.
-
AXE over 10 yearsSetting button style to Custom worked for me! Thanks!
-
Ashley Mills over 6 yearsSeems like this is just a copy of an answer 3 years prior.