可应用于每个 UITextField 的自定义 class - Swift

Custom class that can be applied to every UITextField - Swift

我是编程新手,正在制作一个包含许多 UITextField 的项目。我想让文本字段的底部只有一个边框,这样看起来更简洁,我在这里找到了一些代码可以实现这一点。

let border = CALayer()
let width = CGFloat(2.0)
border.borderColor = UIColor.darkGray.cgColor
border.frame = CGRect(x: 0, y: textField.frame.size.height - width, width: textField.frame.size.width, height: textField.frame.size.height)

border.borderWidth = width
textField.layer.addSublayer(border)
textField.layer.masksToBounds = true

如何制作 class 以便我放置在情节提要中的每个 UItext 字段都可以简单地使其成为所述 class 的一部分?我不想为每个 UITextField 复制和粘贴此代码。有没有办法做到这一点,我可以单独编辑应用此 class 的每个 UITextfield 的占位符文本?

这是一个例子:

class CustomTextField: UITextField {

    convenience init() {
        self.init(frame: .zero)
        let border = CALayer()
        let width = CGFloat(2.0)
        border.borderColor = UIColor.darkGray.cgColor
        border.frame = CGRect(x: 0, y: frame.size.height - width, width: frame.size.width, height: frame.size.height)

        border.borderWidth = width
        layer.addSublayer(border)
        layer.masksToBounds = true
    }

}

要简化您的边界代码,您可以这样做:

layer.borderWidth = 2.0
layer.masksToBounds = true

非常简单,只需在任何 class 下输入一次此代码即可

    @IBDesignable
    open class customUITextField: UITextField {

        func setup() {
            let border = CALayer()
            let width = CGFloat(2.0)
        border.borderColor = UIColor.darkGray.cgColor
        border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height)
        border.borderWidth = width
        self.layer.addSublayer(border)
        self.layer.masksToBounds = true
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)  
        setup()
    }
}

在 "Setup" 函数中放置您想要的所有自定义项。

之后返回设计并在您拥有的所有 TextField 中选择它 运行