Eureka:表单验证不是最新的

时间:2017-08-02 08:26:13

标签: ios eureka-forms

我有一个使用验证规则的Eureka表单和valueHasBeenChanged来反映每个表单字段的验证状态。另外,我想显示整个表单的验证状态(通过着色/启用“确定”按钮)。为此,我在FormViewController中使用row.isValid回调函数。我遍历所有行并测试isValid。但是,似乎RowOf<T>.didSet反映了之前的状态实际更改的值。

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

2 个答案:

答案 0 :(得分:0)

回调确实在isValid中调用,但validationErrors.isEmpty给出validationErrors的结果。在行的内部_value设置后,validationOptions列表会更新,从而导致我的问题中描述的行为。据我了解,无论行row.validate()中的设置是什么,都是这样的。

我的补救措施是在我的valueHasBeenChanged函数中调用isValid以在我读取行的<?php //connect to localhost $sql = mysql_connect("localhost","root",""); if(!$sql) { echo "Connection Not Created"; } $con = mysql_select_db("tigress_ihl"); if(!$sql) { echo "Database Not Connected"; } $data[] = array('Gender','Number'); $sql = "Select count(userprofile_userid) as count, userprofile_gender from mdl_local_info_userprofile group by userprofile_gender"; $query1 = mysql_query($sql); while ($result = mysql_fetch_array($query1)) { $data[] = array($result['userprofile_gender'],(int)$result['count']); } echo json_encode($data); ?> 状态之前明确触发验证。额外调用行验证规则的成本可以忽略不计  对我来说。

答案 1 :(得分:0)

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

.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()