我正在尝试创建一个包含@IDesignable
和UITextField
的UILabel
自定义控件。我创建了UIView
和UITextFieldDelegate
的子类。在方法awakeFromNib()
的这个类中,我创建textField
并将其添加到View
与addSubview()
。在故事板上我的主要ViewController
我添加了一个View控件并将其类设置为我的新类。但什么都没发生。我没有看到文字字段。这是我的代码:
@IBDesignable class CTextField: UIView, UITextFieldDelegate {
var textField: UITextField?
var label: UILabel?
@IBInspectable var placeHolderText: String = "" {
didSet {
textField?.placeholder = placeHolderText
}
}
override func awakeFromNib() {
textField = UITextField(frame: CGRect(x: 20, y: 100, width: 300, height: 40))
textField?.placeholder = placeHolderText
self.addSubview(textField!)
}}
我应该在哪里创建textField?我的班级CTextField在哪个方法?我应该覆盖绘制方法吗?
你应该做下一个:
@IBOutlet weak var customTextFieldView: CTextField!
customTextFieldView
连接storyboard
placeHolderText
最后像这样更新你的课程:
@IBInspectable var placeHolderText: String = "" {
didSet {
textField?.placeholder = placeHolderText
updateView()
}
}
override func awakeFromNib() {
super.awakeFromNib()
}
func updateView() {
subviews.forEach { $0.removeFromSuperview() }
textField = UITextField(frame: CGRect(x: 0, y: 0, width: 300, height: 40))
textField?.backgroundColor = .red
textField?.placeholder = placeHolderText
self.addSubview(textField!)
}