按下按钮时更改自定义UIButton(CoreGraphics)的背景颜色

时间:2016-06-14 23:37:52

标签: ios swift uibutton core-graphics drawrect

有人知道如何更改自定义UIButton的背景颜色吗?

enter image description here

正如您在图像中看到的,名为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")
        }

    }

2 个答案:

答案 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()