UIButton边框功能仅提供白色边框

时间:2014-12-25 08:51:23

标签: swift uibutton cgcolor

我试图在Swift中创建一个Button Borders函数来帮助设置我的UI样式。但是,无论我传入/初始化函数的RGB值,只会创建白色边框。

这是我的功能:

func buttonsWithBorders(button: UIButton, borderWidth: CGFloat, redcolour: CGFloat , greencolour: CGFloat, bluecolour: CGFloat, alpha: CGFloat?) {

let redcolour : CGFloat = 7.0
var greencolour : CGFloat = 3.0
var bluecolour : CGFloat = 2.0
var alpha: CGFloat = 1.0
var widthOfBorder: CGFloat = borderWidth
var theButtonWithBorders: UIButton

var buttonBorderColour : UIColor = UIColor(red: redcolour, green: greencolour, blue: bluecolour, alpha: alpha)

button.layer.borderWidth = widthOfBorder
return button.layer.borderColor = buttonBorderColour.CGColor
}

我用它来称呼它:

buttonsWithBorders(learnHomeButton, 2.0,2.0, 5.0, 5.0, 1.0)

另外我知道传入值并初始化它们是不正确的但是Xcode抱怨我在使用之前没有初始化,否则

非常感谢任何帮助,干杯

3 个答案:

答案 0 :(得分:1)

您没有初始化它们。您声明的完全变量的名称与您传入的参数的名称相同。每当您使用letvar时,您都会引入一个全新的变量。< / p>

当引入一个与当前在范围内的另一个名称相同的新变量时,这被称为variable shadowing,你在这里拥有的几乎是一本教科书案例。

更好,更简洁的函数实现可能如下所示:

func addButtonBorder(button: UIButton, width: CGFloat, red: CGFloat, blue: CGFloat, green: CGFloat, alpha: CGFloat = 1.0) {
    button.layer.borderColor = UIColor(red: red, green: green, blue: blue, alpha: alpha).CGColor
    button.layer.borderWidth = width
}

我使用了不同的名称,因为buttonsWithBorders表示将从此函数返回一个或多个按钮。这似乎不是你的意图。由于你输入了一个按钮,你只能得到一个,但“按钮”意味着不止一个。

如果我要用边框初始化很多按钮,我可能会这样做:

extension UIButton {
    convenience init(frame: CGRect, borderColor: UIColor, borderWidth: CGFloat = 1.0) {
        self.init(frame: frame)
        setBorder(borderColor, borderWidth: borderWidth)
    }
    func setBorder(borderColor: UIColor, borderWidth: CGFloat = 1.0) {
        layer.borderWidth = borderWidth
        layer.borderColor = borderColor.CGColor
    }
}

然后你可以说UIButton(frame: frame, borderColor: borderColor, borderWidth: 2.0)初始化一个新按钮,或者button.setBorder(borderColor, borderWidth: 2.0)来设置现有按钮的边框。

答案 1 :(得分:0)

颜色值必须介于0.0和1.0之间,因此您应将它们定义为:

let redcolour : CGFloat = 7.0 / 255.0
var greencolour : CGFloat = 3.0 / 255.0
var bluecolour : CGFloat = 2.0 / 255.0

答案 2 :(得分:0)

UIColor在0和1之间采用浮点数。因此,您希望将RGB值除以255.0

以下是我使用的代码,适用于游乐场:

  

导入基金会

     

导入UIKit

     

func buttonsWithBorders(按钮:UIButton,borderWidth:CGFloat,   redcolour:CGFloat,greencolour:CGFloat,bluecolour:CGFloat,   alpha:CGFloat){

let buttonBorderColour : UIColor = UIColor(red: redcolour, green: greencolour, blue: bluecolour, alpha: alpha)

button.layer.borderWidth = borderWidth
return button.layer.borderColor = buttonBorderColour.CGColor
     

}

     

让learnHomeButton = UIButton(frame:CGRect(x:0,y:0,width:50,   身高:50))

     

buttonsWithBorders(learnHomeButton,2.0,177 / 255.0,177 / 255.0,   177 / 255.0,1.0)

我编辑了代码,因此您可以将颜色作为参数传递给函数。希望它有所帮助。