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()
我有一个 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()