禁用UIButton不褪色或灰色

在我的iPhone应用程序中,我有一个在Interface Builder中创build的UIButton。 我可以成功启用和禁用它像这样在我的代码…

sendButton.enabled = YES; 

要么

 sendButton.enabled = NO; 

但是,button的外观总是一样的! 它不褪色或灰色。 如果我尝试点击它,但是按预期启用或禁用。 我错过了什么吗? 它不应该看起来褪色或灰色?

谢谢

你可以使用下面的代码:

 sendButton.enabled = YES; sendButton.alpha = 1.0; or sendButton.enabled = NO; sendButton.alpha = 0.5; 

只是改变状态configuration禁用和select你想要的,背景图像为禁用状态

在这里输入图像说明

另一种select是将文本颜色(例如浅灰色)更改为禁用状态。 在故事板编辑器中,从“状态configuration”popup式button中select“禁用”,然后使用“文本颜色”popup式button更改文本颜色。 在代码中,使用-setTitleColor:forState:消息。

(我意识到这是一个较旧的post,但我认为别人可能会喜欢这个选项)

尝试为UIControlStateDisabled (禁用的灰色图像)和UIControlStateNormal (正常图像)设置不同的图像,使button为您生成禁用状态。

如果您使用文本button,则可以将其放入viewDidLoad实例方法中

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

例:

 [self.syncImagesButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled]; 

你可以使用UIButton属性adjustsImageWhenDisabled
(@property (nonatomic) BOOL adjustsImageWhenDisabled)

例如:

  Button.adjustsImageWhenDisabled = false 

你可以使用这两个第一个答案,并将是一个更好的结果。

在属性检查器中(当你selectbutton时),将State Config(状态configuration)更改为Disabled(禁用),以设置禁用时将出现的新图像(删除Content-> Enabled检查中的标记以使其禁用) 。

而当你改变状态为启用时,图像将从这个状态加载。

将alpha逻辑添加到这是一个很好的细节。

问候!

这是一个相当古老的问题,但有一个很简单的方法来实现这一点。

myButton.userInteractionEnabled = false

这只会禁用任何触摸手势,而不会改变button的外观

我被困在同样的问题。 设置阿尔法不是我想要的。

UIButton有“ 背景图像 ”和“ 背景颜色 ”。 对于图像, UIButton有一个属性为

@property (nonatomic) BOOL adjustsImageWhenDisabled

当button被禁用时,背景图像被点亮。 对于背景颜色,设置alpha,Ravin的解决scheme,工作正常。

首先,你必须检查你是否有未经检查的“禁用调整图像”框下的实用程序属性。
然后,检查这个button的背景颜色。

(希望这有帮助,这是一个旧的post; Xcode中的东西可能已经改变了)。

Swift中

 previousCustomButton.enabled = false previousCustomButton.alpha = 0.5 

要么

 nextCustomButton.enabled = true nextCustomButton.alpha = 1.0 

如果UIButton处于与selecteddisabled结合的状态,则状态为UIControlStateSelected | UIControlStateDisabled UIControlStateSelected | UIControlStateDisabled

所以,这是国家需要调整

 [button setTitleColor:color UIControlStateSelected | UIControlStateDisabled]; [button setImage:image forState:UIControlStateSelected | UIControlStateDisabled]; 

下面的方法是子类UIButton

 @implementation TTButton - (void)awaeFromNib { [super awakeFromNib]; //! Fix behavior when `disabled && selected` //! Load settings in `xib` or `storyboard`, and apply it again. UIColor *color = [self titleColorForState:UIControlStateDisabled]; [self setTitleColor:color forState:UIControlStateDisabled]; UIImage *img = [self imageForState:UIControlStateDisabled]; [self setImage:img forState:UIControlStateDisabled]; } - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state { [super setTitleColor:color forState:state]; // if (UIControlStateDisabled == state) { [super setTitleColor:color forState:UIControlStateSelected | state]; [super setTitleColor:color forState:UIControlStateHighlighted | state]; } } - (void)setImage:(UIImage *)image forState:(UIControlState)state { [super setImage:image forState:state]; if (UIControlStateDisabled == state) { [super setImage:image forState:UIControlStateSelected | state]; [super setImage:image forState:UIControlStateHighlighted | state]; } } @end 

在Swift> 3.0中创build一个扩展,而不是每个button本身

 extension UIButton { override open var isEnabled : Bool { willSet{ if newValue == false { self.setTitleColor(UIColor.gray, for: UIControlState.disabled) } } } 
 #import "UIButton+My.h" #import <QuartzCore/QuartzCore.h> @implementation UIButton (My) -(void)fade :(BOOL)enable{ self.enabled=enable;// self.alpha=enable?1.0:0.5; } @end 

。H:

 #import <UIKit/UIKit.h> @interface UIButton (My) -(void)fade :(BOOL)enable; @end