我正在使用以下扩展程序,以便在各种视图控制器中的各个文本字段周围绘制蓝线
extension UITextField{
open override func draw(_ rect: CGRect) {
self.layer.cornerRadius = 9.0
self.layer.borderWidth = 0.5
self.layer.borderColor = UIColor(red: 0.0/255.0, green: 122.0/255.0, blue: 255.0/255.0, alpha: 1.0).cgColor
self.layer.masksToBounds = true
}
}
这很完美,但是现在我想从中排除一些特定的文本字段。
例如,视图控制器类MainMenuController上的@IBOutlet weak var dateTextField: UITextField!
应该具有红色边框,而同一视图控制器上的其他文本字段仍应显示蓝色边框。
有没有一种方法可以将扩展名限制为某些文本字段?
非常感谢您的帮助。
答案 0 :(得分:2)
有没有办法限制扩展名
不。因此,这始终是一种糟糕的方法。代替扩展,使用子类。
此外,扩展名中的覆盖是非法的。这根本不应该起作用。
此外,覆盖文本字段的draw
方法是非法的。而且即使是合法的,这样做也不对,因为您没有在画图。 draw
被多次调用以进行绘制,但这只是您要在文本字段的属性中一次一次进行的一次更改。编写子类时,请覆盖文本字段的初始化程序。
因此,假设您所有的文本字段都来自情节提要(例如您的dateTextField
。那么您应该编写:
class BorderedTextField : UITextField {
required init?(coder aDecoder: NSCoder) {
super.init(coder:aDecoder)
self.layer.cornerRadius = 9.0
self.layer.borderWidth = 0.5
self.layer.borderColor = UIColor(red: 0.0/255.0, green: 122.0/255.0, blue: 255.0/255.0, alpha: 1.0).cgColor
self.layer.masksToBounds = true
}
}
然后使用情节提要中的身份检查器将您的文本字段从UITextField转换为BorderedTextField。
您还可以使用@IBInspectable
属性来将边框颜色设置为情节提要板本身中的设置。但这将超出问题的范围。