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