我正在尝试在 Swift 中创建一个按钮边框函数来帮助设计我的 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 提示说我在使用它们之前没有初始化
非常感谢任何帮助,干杯
最佳答案
您没有初始化它们。您正在声明与您传递的参数同名的完全新变量。每当您使用let
或var
时,您都在引入一个全新的变量。
当引入一个与当前范围内的另一个同名的新变量时,这称为 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)
在现有按钮上设置边框。
关于swift - UIButton 边框功能仅返回白色边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645681/