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 }))
关键注意点
- 确保
SegmentedRow的tag是"segment",和Condition.function中监听的参数一致,这样Segment切换时才会触发条件重新计算。 - 枚举的
rawValue要和SegmentedRow的选项标题完全匹配,或者统一用title属性对应,避免字符串不一致导致判断失效。 - 如果不需要隐藏行,只想单独隐藏验证错误提示,可以在Segment切换时手动调用行的
validate()方法,或者通过row.validationErrors清空错误,但隐藏行是更简洁的实现方式。
内容的提问来源于stack exchange,提问作者MillerApps
相关产品推荐
相关产品推荐

