2011-06-10 97 views
32

不是UIButton在启用时应该变成灰色/灰色=否?UIButton不会变灰

我在blackbackground上有一个简单的UIButton(没有自定义图像,没有自定义任何东西,只是用IB拖动它,改变大小和标题)。

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

现在我正在使用一个小的愚蠢的解决方法:隐藏blackbg 0,5阿尔法UIView在隐藏的按钮顶部=否当我需要禁用按钮...但我想设置按钮正确...

有什么想法?

回答

40

没有办法制作UIButton“grayer”。但是你可以用那招:

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

所以你的UIButton貌似不可用;)

+1

是,由于UIButton的是一个黑色的观点之上,改变alpha给出了和我的黑色UIView完全相同的效果,但这是一个更加聪明和简单的解决方案,应该首先想到 - 我正在切换;)谢谢 – xfze 2011-06-10 16:37:06

+0

不客气。 – 2011-06-10 16:38:01

49

还有另一种方式,而不必阿尔法整个按钮:当您设置的

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

然后启用属性为NO,按钮的文本将自动变灰。

1

我偶然发现了这个问题,苹果公司发布了一项新UIKit User Interface Catalog在iOS的7

处理按钮在回答你的问题,UIButton Class现在公开了一个名为adjustsImageWhenDisabled属性,这是“一个布尔值,确定当按钮被禁用时图像是否改变。“

如果此adjustsImageWhenDisabled属性设置为“YES”,则禁用该按钮时图像会变暗,默认值为YES。

0

我面临同样的问题,因为我设置了背景颜色。

我删除了背景颜色并将其仅设置为UIControlStateNormal,启用/禁用的默认行为开始出现。

如果要设置背景色,而不是像试试这个类别的UIColor转换成的UIImage:

here复制:

+ (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; 

设置作为背景的颜色。现在,当您启用/禁用时,应该会出现灰色效果。

1

只需制作一个类似以下的UIButton类别,并在要使用它的类中导入#import "UIButton+StateColors.h"即可。

.H

#import <UIKit/UIKit.h> 

@interface UIButton (StateColors) 

-(void)makeDisabled:(BOOL)flag; 

@end 

。米

#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]; 

这是一个通用的解决方案,我希望......