Swift 3 Eureka 验证 UILabel 有错误
Posted
技术标签:
【中文标题】Swift 3 Eureka 验证 UILabel 有错误【英文标题】:Swift 3 Eureka Validation UILabels with Errors 【发布时间】:2017-02-17 14:49:09 【问题描述】:我刚刚开始使用适用于 Swift 3 的 Eureka Form Builder,但我想知道是否有办法显示验证错误。我在下面添加了一行表单,我试图将错误消息设置为可选的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 上的文档似乎很不完整,但框架本身看起来确实很健壮,所以我想学习如何使用它。
【问题讨论】:
如果它解决了您的问题,请标记答案:) 【参考方案1】:在 Eureka example project 中,他们使用 onRowValidationChanged
并添加/删除带有可自定义消息的 LabelRow
。
【讨论】:
【参考方案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
【讨论】:
很好的建议,谢谢!我还没想过要改变 titleLabel 颜色呢!【参考方案3】:我可以通过在单元格子视图中插入新标签来更改验证文本样式。希望这可以帮助像我一样沮丧的其他人
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)
【讨论】:
以上是关于Swift 3 Eureka 验证 UILabel 有错误的主要内容,如果未能解决你的问题,请参考以下文章
SWIFT 3、Eureka:使用导航控制器时,不调用keyboardWillShow回调
通过删除和添加字母在 UILabel 上的选取框效果 - Swift 3
Swift 3 以编程方式创建 UILabel 并添加 NSLayoutConstraints