有人知道如何更改自定义UIButton的背景颜色吗?
正如您在图像中看到的,名为plot的按钮的背景颜色为橙色。但是留给它的按钮(黑色三角形)不是橙色。
我想要的是当我按下按钮"情节"或"奖励"旁边的三角形按钮也会随之改变。
这是我的代码:
@IBDesignable class LeadingButton: UIButton {
override func drawRect(rect: CGRect) {
// *Draw triangle button:
// Create context for triangle
let context = UIGraphicsGetCurrentContext()
// *Put information into context:
// Info for drawing triangle:
CGContextMoveToPoint(context, 17, 0)
CGContextAddLineToPoint(context, 0, 40)
CGContextAddLineToPoint(context, 17, 40)
CGContextAddLineToPoint(context, 17, 0)
// Info color triangle
CGContextSetFillColorWithColor(context, UIColor.blackColor().CGColor)
// Color in triangle with specified color
CGContextFillPath(context)
// Draw triangle
CGContextStrokePath(context)
}
}
class MovieDetailController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// For changing background color of buttons
self.buttonArray = [plotB, directorB, writerB, actorsB, countryB, awardB, posterB, leadingB, trailingB]
}
func isButton(pressed: Int) {
switch pressed {
case 0...8:
let selectedButton = buttonArray[pressed]
selectedButton.backgroundColor = UIColor.orangeColor()
var idDictionary = [0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6]
idDictionary.removeValueForKey(pressed)
for (_, value) in idDictionary {
if value == 6 {
}
else {
let remainButtons = buttonArray[value]
remainButtons.backgroundColor = UIColor.blackColor()
}
}
default:
print("test")
}
}
答案 0 :(得分:0)
将绘图代码移动到绘图函数中,如下所示:
func drawTriangle() {
//Move draw rect code into here
}
并从drawRect调用此函数。还要确保在drawRect中调用super
override func drawRect(rect: CGRect) {
super.drawRect(rect)
drawTriangle()
}
然后你可以在按钮上添加一个变量来指示它的颜色,在do集中你可以设置三角形颜色
var triangleColor:UIColor = UIColor.blackColor() {
didSet {
drawTriangle()
}
}
然后在绘制三角形时获取颜色:
替换:
CGContextSetFillColorWithColor(context, UIColor.blackColor().CGColor)
使用:
CGContextSetFillColorWithColor(context, triangleColor.CGColor)
然后您应该能够检查您按下的按钮是否为Plot / Award并使用以下方式设置相应的按钮颜色:
(triangleButtonVariable).triangleColor = YourColour
答案 1 :(得分:0)
如果没有在drawRect内部(或从)完成新颜色的设置,您将收到无效上下文错误。
尝试设置新颜色,然后告诉按钮setNeedsDisplay()