You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eureka表单:SegmentedRow切换时无法隐藏验证错误(v4.0.1)

解决Eureka 4.0.1中SegmentedRow切换时验证错误的全局隐藏问题

我来帮你搞定这个Eureka表单的验证错误隐藏问题,你当前的代码只针对单个Segment值生效,核心是要把判断逻辑扩展到所有ImportSelectionType的枚举场景,同时优化类型判断的安全性。

核心思路

你需要根据SegmentedRow的当前选中值,为每个带验证的行设置对应的隐藏规则——本质是:当切换到不需要验证的Segment时,让对应行(包括它的验证错误提示)隐藏;切换到需要验证的Segment时,显示行和错误提示。

优化后的解决方案

第一步:优先用枚举类型判断(避免字符串硬编码错误)

如果你的ImportSelectionType是枚举类型,先把Segment返回的字符串转换成枚举值,再做判断,这样比直接比较字符串更可靠:

// 假设你的ImportSelectionType枚举定义(如果还没做,建议改成这样)
enum ImportSelectionType: String {
    case keystore = "Keystore"
    case mnemonic = "Mnemonic"
    case privateKey = "Private Key"
    
    var title: String { rawValue }
}

// 针对需要验证的行设置隐藏条件
$0.hidden = Condition.function(["segment"], { form in
    // 先获取Segment选中值并转成枚举
    guard let segmentTitle = form.rowBy(tag: "segment")?.baseValue as? String,
          let selectedType = ImportSelectionType(rawValue: segmentTitle) else {
        // 无法获取Segment值时,默认隐藏(可根据你的需求调整)
        return true
    }
    
    // 这里写你的业务规则:比如只有选中keystore时显示验证行,其他情况隐藏
    return selectedType != .keystore
})

第二步:针对多Segment场景的批量处理

如果每个Segment对应不同的验证行,你只需要给每个验证行单独设置对应的隐藏条件即可。比如:

  • Keystore密码行:只有选中.keystore时显示
  • 助记词输入行:只有选中.mnemonic时显示

示例代码:

// Keystore密码验证行
PasswordRow("keystore_pwd") {
    $0.title = "Keystore密码"
    $0.add(rule: RuleRequired())
    $0.validationOptions = .validatesOnChange
}
.hidden(Condition.function(["segment"], { form in
    guard let segmentTitle = form.rowBy(tag: "segment")?.baseValue as? String,
          let selectedType = ImportSelectionType(rawValue: segmentTitle) else {
        return true
    }
    return selectedType != .keystore
}))

// 助记词验证行
TextRow("mnemonic_phrase") {
    $0.title = "助记词"
    $0.add(rule: RuleRequired())
    $0.validationOptions = .validatesOnChange
}
.hidden(Condition.function(["segment"], { form in
    guard let segmentTitle = form.rowBy(tag: "segment")?.baseValue as? String,
          let selectedType = ImportSelectionType(rawValue: segmentTitle) else {
        return true
    }
    return selectedType != .mnemonic
}))

关键注意点

  1. 确保SegmentedRow的tag是"segment",和Condition.function中监听的参数一致,这样Segment切换时才会触发条件重新计算。
  2. 枚举的rawValue要和SegmentedRow的选项标题完全匹配,或者统一用title属性对应,避免字符串不一致导致判断失效。
  3. 如果不需要隐藏行,只想单独隐藏验证错误提示,可以在Segment切换时手动调用行的validate()方法,或者通过row.validationErrors清空错误,但隐藏行是更简洁的实现方式。

内容的提问来源于stack exchange,提问作者MillerApps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:10:47