我试图在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抱怨我在使用之前没有初始化,否则
非常感谢任何帮助,干杯
答案 0 :(得分:1)
您没有初始化它们。您声明的完全新变量的名称与您传入的参数的名称相同。每当您使用let
或var
时,您都会引入一个全新的变量。< / 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)
我编辑了代码,因此您可以将颜色作为参数传递给函数。希望它有所帮助。