Swift 3 Eureka验证UILabels有错误

时间:2017-02-17 14:49:09

标签: ios swift3 eureka-forms

我刚开始使用Eureka Form Builder for Swift 3,但我想知道是否有办法显示验证错误。我已经在下面添加了一行我的表单,我试图将错误消息设置为可选的detailTextLabel,但是它没有显示。我的问题是,Eureka是否在行中内置了UILabel的默认错误消息,还是我必须创建一个能够显示消息的自定义行?

form +++ Section("Contactgegevens")
        <<< NameRow(){ row in
            row.title = "Achternaam"
            row.placeholder = "Achternaam"
            row.value = user?.surname
            row.add(rule: RuleRequired(msg: "Dit veld is verplicht."))
            row.validationOptions = .validatesOnChangeAfterBlurred
            }.onChange({ (row) in
                if !row.isValid {

                    var errors = ""

                    for error in row.validationErrors {
                        let errorString = error.msg + "\n"
                        errors = errors + errorString
                    }
                    print(errors)
                    row.cell.detailTextLabel?.text = errors
                    row.cell.detailTextLabel?.isHidden = false

                }
            })

关于Eureka的文档似乎非常不完整,但框架本身确实非常强大,所以我想学习如何使用它。

3 个答案:

答案 0 :(得分:4)

在Eureka example project中,他们使用onRowValidationChanged并添加/删除LabelRow,其中包含可自定义的消息。

答案 1 :(得分:2)

您似乎想要使用.cellUpdate而不是.onChange。指出错误的另一个选择是将titleLable.textColor更改为.red。如果您确实需要显示特定的错误消息,您可以按照您尝试的方式进行操作,只需知道detailTextLable可能与您的值重叠。如果你走这条路,我建议你可能会留下左对齐和短错误信息。另外要注意的是,如果您希望在用户输入时填充错误,则需要使用.validatesOnChange而不是.validatesOnChangeAfterBlurred。我不确定Eureka是否更改了他们的文档,但大部分信息都可以在支持文档中找到@ https://github.com/xmartlabs/Eureka

form +++ Section("Contactgegevens")
    <<< NameRow(){ row in
        row.title = "Achternaam"
        row.placeholder = "Achternaam"
        row.value = user?.surname
        row.add(rule: RuleRequired(msg: "Dit veld is verplicht."))
        row.validationOptions = .validatesOnChangeAfterBlurred
        }.cellUpdate { cell, row in
            if !row.isValid {

                cell.titleLabel?.textColor = .red

                var errors = ""

                for error in row.validationErrors {
                    let errorString = error.msg + "\n"
                    errors = errors + errorString
                }
                print(errors)
                cell.detailTextLabel?.text = errors
                cell.detailTextLabel?.isHidden = false
                cell.detailTextLabel?.textAlignment = .left

            }
}

答案 2 :(得分:0)

我可以通过在单元格子视图中插入新标签来更改验证文本样式。希望这能帮助别人像我一样感到沮丧

             if !row.isValid {
                for (index, validationMsg) in row.validationErrors.map({ $0.msg }).enumerated() {
                    let labelRow = LabelRow() {
                    let errorLabel = UILabel()
                        errorLabel.text = validationMsg
                        errorLabel.frame = CGRect(x:0, y:0, width:$0.cell.frame.width, height:30)
                        errorLabel.textColor = UIColor.red
                        errorLabel.textAlignment = .left
                        $0.cell.addSubview(errorLabel)
                    }
                    row.section?.insert(labelRow, at: row.indexPath!.row + index + 1)
                }
            }