簡體   English   中英

如何在自定義尤里卡行中驗證諸如textfield之類的對象?

[英]How can I validate an object like textfield in a custom Eureka row?

我已經使用Eureka框架創建了一個簡單的自定義行,但是驗證不起作用,如何驗證該行內的文本字段? 我已經在Google上進行了研究,但沒有任何幫助。 任何人都可以給我一些幫助嗎?

public class TitleAndTextFieldCellModel: NSObject {

  // MARK: - Variable
  public var title: String = ""
  public var placeHolder: String = ""
  public var inputValue: String = ""
  public var object: Any?

  // MARK: - Init
  public init(title: String, placeHolder: String = "", inputValue: String = "", object: Any? = nil) {
    self.title = title
    self.placeHolder = placeHolder
    self.inputValue = inputValue
    self.object = object
  }
}

public class TitleAndTextFieldCell: Cell<TitleAndTextFieldCellModel>, CellType {

  // MARK: - Outlets
  @IBOutlet weak public var titleLabel: UILabel!
  @IBOutlet weak public var inputTextField: UITextField!

  override public func setup() {
    super.setup()
    selectionStyle = .none
    inputTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: UIControl.Event.editingChanged)
  }

  override public func update() {
    super.update()
    if let model = row.value {
      titleLabel.text = model.title
      inputTextField.placeholder = model.placeHolder
      inputTextField.text = model.inputValue
    }
  }

  @objc func textFieldDidChange(_ textField: UITextField) {
    self.row.value?.inputValue = textField.text ?? ""
  }
}

final public class TitleAndTextFieldRow: Row<TitleAndTextFieldCell>, RowType {
  required public init(tag: String?) {
    super.init(tag: tag)
    cellProvider = CellProvider<TitleAndTextFieldCell>(nibName: "TitleAndTextFieldCell")
  }
}

這就是我的用法:

<<< TitleAndTextFieldRow() {
            $0.value = TitleAndTextFieldCellModel(title: "Name")
            $0.add(rule: RuleRequired(msg: "Field required"))
            $0.validationOptions = .validatesOnChangeAfterBlurred
            }.cellUpdate({ (cell, row) in
              if !row.isValid {
                cell.inputTextField.layer.borderWidth = 1
                cell.inputTextField.layer.borderColor = UIColor.red.cgColor
              }
            })

我想我自己找到了答案。 對於那些需要的人,請執行以下代碼:

@objc func textFieldDidChange(_ textField: UITextField) {
    if textField.text == "" {
      self.row.validationErrors.append(ValidationError(msg: "Required"))
      self.row.validate()
    }
    self.row.value?.inputValue = textField.text ?? ""
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM