UIButton不应该在enabled=NO时变成灰色吗?
我有一个简单的UIButton,放在黑色背景上(没有自定义图片,没有其他自定义,只是在IB中拖动了它并更改了大小和标题)。
但是,当我以编程方式将其设置为禁用时,它仍然是白色的!
目前,我使用了一个愚蠢的小解决方法:在按钮上方放置了一个黑色背景透明度为0.5的隐藏UIView。当我需要禁用按钮时,将其设置为hidden=NO...但我想正确地设置按钮...
有什么想法吗?
还有一种方法可以不用为整个按钮设置透明度:
[startButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
每当您将enabled属性设置为NO时,按钮的文本会自动变灰色。
无法使UIButton "灰化",但可以使用以下技巧:
UIButton *myButton;
myButton.alpha = 0.4;
myButton.enabled = NO;
因此,您的UIButton似乎无法使用;)
只需创建一个如下所示的UIButton类别,并在需要使用它的类中导入#import "UIButton+StateColors.h"
。
.h
#import <UIKit/UIKit.h>
@interface UIButton (StateColors)
-(void)makeDisabled:(BOOL)flag;
@end
.m
#import "UIButton+StateColors.h"
#define ENABLED_BUTTON_ALPHA 1
#define DISABLED_BUTTON_ALPHA 0.3
@implementation UIButton (StateColors)
-(void)makeDisabled:(BOOL)flag {
self.enabled = !flag;
self.alpha = flag ? DISABLED_BUTTON_ALPHA : ENABLED_BUTTON_ALPHA;
}
@end
并且像这样使用它...
[self.emailBtn makeDisabled:NO];
[self.printBtn makeDisabled:YES];
我希望它成为一种通用解决方案...
UIControlStateNormal
设置了它,启用/禁用的默认行为开始出现。+ (UIImage *)imageWithColor:(UIColor *)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
[self.loginButton setBackgroundImage:[UIImage imageWithColor:greenColor] forState:UIControlStateNormal];
self.loginButton.enabled = NO;
将颜色设置为背景。现在启用/禁用时,应出现灰色效果。