在 swift 4 中使用 textField 和标签自定义控件

CustomControl with textField and label in swfit 4

我正在尝试创建一个 @IDesignable 自定义控件,其中包含 UITextFieldUILabel。 我创建了 UIViewUITextFieldDelegate 的子 class。在此 class 方法 awakeFromNib() 中,我创建了 textField 并将其添加到 ViewaddSubview()。我在故事板上的主要 ViewController 添加了一个视图控件并将其 class 设置为我的新 class。但什么也没有发生。我没有看到文本字段。这是我的代码:

@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!)
     }}

我应该在哪里创建文本字段?在我的 class CTextField 中使用哪种方法?我应该重写 draw 方法吗?

你接下来应该做的:

  • 在视图控制器中创建 @IBOutlet weak var customTextFieldView: CTextField!
  • storyboard
  • 中连接 customTextFieldView

- 为您的视图设置正确的约束:

  • 在情节提要
  • 中设置 placeHolderText

最后像这样更新您的 class:

@IBInspectable var placeHolderText: String = "" {
        didSet {
            textField?.placeholder = placeHolderText
            updateView()
        }
    }
override func awakeFromNib() {
    super.awakeFromNib()
}

func updateView() {
    subviews.forEach { [=10=].removeFromSuperview() }

    textField =  UITextField(frame: CGRect(x: 0, y: 0, width: 300, height: 40))
    textField?.backgroundColor = .red
    textField?.placeholder = placeHolderText

    self.addSubview(textField!)
}