I'm trying to set a UIButton
's titleColor
to a certain color when it is selected and when it is highlighted, however, I need to set the button to be selected when the user touches down on the UIButton
.
I've set it up like so:
[button setTitleColor:normalColor forState:UIControlStateNormal];
[button setTitleColor:superDuperSpecialColor forState:UIControlStateHighlighted];
[button setTitleColor:superDuperSpecialColor forState:UIControlStateSelected];
[button addTarget:self
action:@selector(action:)
forControlEvents:UIControlEventTouchDown];
But when the button gets selected in the action:
method using [senderButton setSelected:YES]
, it sets the titleColor
to normalColor
, rather than superDuperSpecialColor
, which it should be, as it's both highlighted AND selected.
Commenting out the setSelected:
call prevents the button from becoming and staying selected and commenting out the highlighted state color doesn't have any effect, it seems.
Will I have to add targets for UIControlEventTouchCancel
, UIControlEventTouchUpInside
and UIControlEventTouchUpOutside
in order to call setSelected:
after the highlight ends -or- change the titleColor
for UIControlStateNormal
to superDuperSpecialColor
when the button gets a touch?
On a side note, I would have liked to set the titleColor
like so:
[button setTitleColor:superDuperSpecialColor
forState:(UIControlStateHighlighted | UIControlStateSelected)];
But that doesn't seem to work. Why is that? Does Objective-C check for state equivalency?