UIButton不会变灰

36

UIButton不应该在enabled=NO时变成灰色吗?

我有一个简单的UIButton,放在黑色背景上(没有自定义图片,没有其他自定义,只是在IB中拖动了它并更改了大小和标题)。

但是,当我以编程方式将其设置为禁用时,它仍然是白色的!

目前,我使用了一个愚蠢的小解决方法:在按钮上方放置了一个黑色背景透明度为0.5的隐藏UIView。当我需要禁用按钮时,将其设置为hidden=NO...但我想正确地设置按钮...

有什么想法吗?

5个回答

51

还有一种方法可以不用为整个按钮设置透明度:

[startButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];

每当您将enabled属性设置为NO时,按钮的文本会自动变灰色。


44

无法使UIButton "灰化",但可以使用以下技巧:

UIButton *myButton;
myButton.alpha = 0.4;
myButton.enabled = NO;

因此,您的UIButton似乎无法使用;)


1
是的,因为UIButton位于黑色视图之上,改变alpha值会产生与我的黑色UIView完全相同的效果,但这是一个更聪明和简单的解决方案,我应该先想到它 - 我要切换 ;) 谢谢 - xfze
简单明了的答案。如果你想让它看起来像一个禁用的按钮,实际上是0.5 alpha。 - Eran Talmor

2

只需创建一个如下所示的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];

我希望它成为一种通用解决方案...


1
我偶然发现了这个问题,苹果为在iOS 7中使用按钮发布了一个新的UIKit用户界面目录
针对你的问题,UIButton Class现在暴露了一个名为adjustsImageWhenDisabled的属性,该属性是“确定当按钮被禁用时图像是否改变的布尔值。”
如果将adjustsImageWhenDisabled属性设置为“YES”,则当按钮被禁用时,图像会被绘制得更暗。默认值为YES。

1
我遇到了同样的问题,因为我设置了背景颜色。
我移除了背景颜色,并仅为UIControlStateNormal设置了它,启用/禁用的默认行为开始出现。
如果您正在设置背景颜色而不是图像,请尝试使用此类别将UIColor转换为UIImage:
这里复制:
+ (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;

将颜色设置为背景。现在启用/禁用时,应出现灰色效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接