swift - UIButton 边框功能仅返回白色边框

标签 swift uibutton cgcolor

我正在尝试在 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 提示说我在使用它们之前没有初始化

非常感谢任何帮助,干杯

最佳答案

您没有初始化它们。您正在声明与您传递的参数同名的完全变量。每当您使用letvar 时,您都在引入一个全新的变量。

当引入一个与当前范围内的另一个同名的新变量时,这称为 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/

相关文章:

ios - 无法使用多点连接 Swift 连接对等点

swift - Xcode 8.2.1 中对成员的模糊引用

ios - 将目标添加到 tableview 单元格内的 collectionview 单元格的按钮

ios - 为 UIControlStateHighlighted 设置 UIImage

iPhone - 帮助 CGGradientCreateWithColorComponents 并根据屏幕截图创建渐变

ios - 关于CG颜色/定义

ios - 从模态呈现的 View Controller 传回数据的委托(delegate)

ios - 如何在 swift 3 的 tableview 单元格内单击更改按钮标题

swift - 从标签创建计时器时,使用 Xcode 在 Swift 5 中出错

cocoa - 是否可以将 CGPattern 图像背景颜色锚定到 CALayer 的中心?