Eureka:表单验证不是最新的

Eureka: Form validation not up-to-date

我有一个 Eureka 表单,它使用验证规则和 .cellUpdate() 来反映每个表单字段的验证状态。此外,我想显示整个表单的验证状态(通过 colouring/enabling 和 "OK" 按钮)。为此,我在 FormViewController 中使用了 valueHasBeenChanged 回调函数。我循环遍历所有行并测试 row.isValid。但是,似乎 isValid 反映了 值实际更改之前的状态。

如何以干净的方式实现预期的机制(即不摆弄全局变量等)?

确实在RowOf<T>.didSet中调用了回调,但是isValid给出了validationErrors.isEmpty的结果。 validationErrors 列表在 行的内部 _value 设置后 依次更新,导致我的问题中描述的行为。据我了解,无论行的 validationOptions.

中的设置是什么,都是这样

我的补救措施是在我的 valueHasBeenChanged 函数中调用 row.validate() 以在我读取该行的 isValid 状态之前显式触发验证。额外调用该行的验证规则的成本可以忽略不计 对我来说。

实现点击表单验证的更简单方法是添加

.cellUpdate { cell, row in
  if !row.isValid {
    cell.titleLabel?.textColor = .red
  }
}

对每一行进行编码,使用 . validatesOnDemand 作为该行的验证规则,然后在按钮操作中调用 form.validate()

例如:

        <<< TextRow() { row in
            row.title = ""
            row.tag = "firstName"
            row.add(rule: RuleRequired())
            row.validationOptions = .validatesOnDemand
            }
            .cellUpdate { cell, row in
                if !row.isValid {
                    cell.backgroundColor =.red
                    cell.titleLabel?.textColor = .red
                } else {
                    cell.backgroundColor = .clear
                    cell.titleLabel?.textColor = .white
                }
        }

...

form.validate()