Swift 3 个 Eureka 验证 UILabels 有错误
Swift 3 Eureka Validation UILabels with Errors
我刚刚开始使用 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 的文档似乎真的不完整,但框架本身确实非常强大,所以我想学习如何使用它。
您似乎想使用 .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
}
}
在 Eureka example project 中,他们使用 onRowValidationChanged
和 add/remove LabelRow
以及可以自定义的消息。
我能够通过将新标签插入单元格子视图来更改验证文本样式。希望这能帮助像我一样沮丧的其他人
if !row.isValid {
for (index, validationMsg) in row.validationErrors.map({ [=10=].msg }).enumerated() {
let labelRow = LabelRow() {
let errorLabel = UILabel()
errorLabel.text = validationMsg
errorLabel.frame = CGRect(x:0, y:0, width:[=10=].cell.frame.width, height:30)
errorLabel.textColor = UIColor.red
errorLabel.textAlignment = .left
[=10=].cell.addSubview(errorLabel)
}
row.section?.insert(labelRow, at: row.indexPath!.row + index + 1)
}
}
我刚刚开始使用 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 的文档似乎真的不完整,但框架本身确实非常强大,所以我想学习如何使用它。
您似乎想使用 .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
}
}
在 Eureka example project 中,他们使用 onRowValidationChanged
和 add/remove LabelRow
以及可以自定义的消息。
我能够通过将新标签插入单元格子视图来更改验证文本样式。希望这能帮助像我一样沮丧的其他人
if !row.isValid {
for (index, validationMsg) in row.validationErrors.map({ [=10=].msg }).enumerated() {
let labelRow = LabelRow() {
let errorLabel = UILabel()
errorLabel.text = validationMsg
errorLabel.frame = CGRect(x:0, y:0, width:[=10=].cell.frame.width, height:30)
errorLabel.textColor = UIColor.red
errorLabel.textAlignment = .left
[=10=].cell.addSubview(errorLabel)
}
row.section?.insert(labelRow, at: row.indexPath!.row + index + 1)
}
}