How to disable the highlight control state of a UIButton?

拜拜、爱过 提交于 2019-11-28 15:02:41

问题


I've got a UIButton that, when selected, shouldn't change state when being touched. The default behaviour is for it to be in UIControlStateHighlighted while being touched, and this is making me angry.

Suggestions?


回答1:


Your button must have its buttonType set to Custom.

In IB you can uncheck "Highlight adjusts image".

Programmatically you can use theButton.adjustsImageWhenHighlighted = NO;

Similar options are available for the "disabled" state as well.




回答2:


In addition to above answer of unchecking "highlight adjusts image" in IB, make sure that button type is set CUSTOM.




回答3:


This will work for you:

[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];

3rd line is the trick here...

This works the same for setting image/backgroundImage




回答4:


adjustsImageWhenHighlighted = NO;



回答5:


button.adjustsImageWhenDisabled = NO;

is equally useful for having your own appearance of a disabled button.




回答6:


Depending on what changes from the default to the highlighted state of the button, you can call a couple of methods to set them to what you need. So if the image changes you can do

[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];

If the text changes you can do

[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];

other similar functions:

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state




回答7:


OK here's an easy solution if this works for you, after a week of banging my head on this it finally occurred to me to just set highlighted=NO for the 1st line of the IBAction method for the TouchUpInside or TouchDown, or whatever works. For me it was fine on the TouchUpInside.

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}



回答8:


For Swifty Developer -

yourButton.adjustsImageWhenHighlighted = false



回答9:


Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false



回答10:


just two things:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;



回答11:


I had a similar issue and found that "unchecking" Clears Graphic Content in interface builder fixed my issue




回答12:


make your button Type - "Custom" and Uncheck - Highlighted Adjust image and you are done.




回答13:


avoid to set UIButton's Line Break to Clip, use instead the standard Truncate Middle



来源:https://stackoverflow.com/questions/2259905/how-to-disable-the-highlight-control-state-of-a-uibutton

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!