禁用时在UIButton上设置背景颜色?

时间:2015-06-09 14:30:13

标签: ios colors uibutton

是否可以设置已禁用 UIButton的背景颜色?当按钮被禁用时,我们想要使用更柔和的颜色,但我没有看到UIButton中允许这样做的任何方法。是否有解决方法或其他方式可以实现此目标?

6 个答案:

答案 0 :(得分:6)

我专注于你的评论 - “当按钮被禁用时,我们想要使用更柔和的颜色”。如果更改按钮的alpha是可接受的解决方案,您可以很好地使用此代码。

someButton.alpha  = 0.5;//This code should be written in the place where the button is disabled.

答案 1 :(得分:2)

似乎这是不可能的,因为背景颜色属性由UIView类控制,UIButton类是UIButton的父级。

所以UIButton控制状态不拥有此属性,也不控制它。

但您仍然可以继承setEnabled并覆盖UIButton方法以相应地更新颜色。

这是最明确的方法。因为您可以将继承的类分配给storyboard或Xib文件中的任何IBOutlets。无需任何连接。 (没有int foo; int *pointer = &foo; int &reference = foo;

希望这有用,如果您希望我可以分享一些代码。

答案 2 :(得分:2)

按我的直言,使用按钮的最佳方法是对类进行子类化和自定义UI,例如:

class XYButton: UIButton {

    override public var isEnabled: Bool {
        didSet {
            if self.isEnabled {
                self.backgroundColor = self.backgroundColor?.withAlphaComponent(1.0)
            } else {
                self.backgroundColor = self.backgroundColor?.withAlphaComponent(0.5)
            }
        }
    }

}

然后,您可以在情节提要/ xib中或以编程方式使用XYButton

**更优雅:

didSet {
    self.backgroundColor = self.backgroundColor?.withAlphaComponent(isEnabled ? 1.0 : 0.5)
}

答案 3 :(得分:1)

希望这会有所帮助:

UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 35)];

CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context, [[UIColor redColor] CGColor]);
CGContextFillRect(context, rect);

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[btn setBackgroundImage:image forState:UIControlStateDisabled];

答案 4 :(得分:1)

此代码适用于Swift 2

    let rect = CGRectMake(0, 0, someButton.frame.width,someButton.frame.height)
    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()
    CGContextSetFillColor(context, CGColorGetComponents(UIColor.lightGrayColor().CGColor))
    CGContextFillRect(context, rect)
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0)
    view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    someButton.setBackgroundImage(image, forState: .Disabled)

    someButton.enabled = false

答案 5 :(得分:0)

如此处所示: https://stackoverflow.com/a/5725169/1586606
设置alpha属性,如;

myButton.alpha = 0.5