大家好,我有点新手。
我想子类化UITextField并添加额外的功能以创建自己的新TextField,我通过创建CALayer的新实例以创建新的下划线边框来修改TextField的边框,因此
我的文本字段正在运行,这是我的TextField在设备上运行时在InterfaceBuild VS中看起来不同的情况,如下图所示?
我尝试在prepareForInterfaceBuilder中调用setborder func,但这对我不起作用 所以我的第一个问题是我应该怎么解决这个问题?
第二个在init func和draw func中调用我的func setborder有什么区别?
TextFieldPhoto attributes inspector 预先感谢
import FontAwesome_swift
@IBDesignable
class NewUITextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
setBorder()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setBorder()
}
override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
var txtRec = super.leftViewRect(forBounds: bounds)
txtRec.origin.x += leftPadding
return txtRec
}
override func textRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: UIEdgeInsets(top: 0, left: 35, bottom: 0, right: 0))
}
override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: UIEdgeInsets(top: 0, left: 35, bottom: 0, right: 0))
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: UIEdgeInsets(top: 0, left: 35, bottom: 0, right: 0))
}
@IBInspectable var leftPadding : CGFloat = 0
@IBInspectable var borderColor :UIColor = UIColor.lightGray {
didSet{
setBorder()
}
}
@IBInspectable var borderWidth : CGFloat = 0.4 {
didSet{
setBorder()
}
}
@IBInspectable var leftImage : UIImage? {
didSet{
setleftImage()
}
}
func setBorder() {
let border = CALayer()
let width = CGFloat(self.borderWidth)
border.borderColor = self.borderColor.cgColor //UIColor.lightGray.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.borderStyle = .none
self.layer.addSublayer(border)
self.layer.masksToBounds = true
}
func setleftImage() {
if let img = leftImage{
self.leftViewMode = .always
let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
imgView.image = img
imgView.contentMode = .scaleAspectFit
imgView.tintColor = UIColor.lightGray
self.leftView = imgView
}
else {
self.leftViewMode = .never
self.leftView = nil
}
}
override func prepareForInterfaceBuilder() {
setBorder()
}
}