如何根据内容是否为空隐藏Eureka表单的行或分区
解决Eureka表单中根据值隐藏行/分区的问题
首先,咱们来分析你当前代码里的核心问题:你设置的hidden条件完全偏离了需求——你在判断当前行是否存在,而不是判断行对应的内容(car?.internComment)是否为空。因为当前行就是你正在配置的Comment行,form.rowBy(tag: "Comment")永远能找到它,所以这个条件的逻辑完全起不到根据内容判断隐藏的作用。
一、修复单个行的隐藏逻辑(以Comment行为例)
如果你希望当car?.internComment为空(或空白字符串)时隐藏该行,正确的做法是直接判断这个值的状态:
+++ Section("Comment") <<< TextRow() { $0.tag = "Comment" $0.title = car?.internComment $0.cell.textLabel?.numberOfLines = 0 $0.hidden = Condition.function([]) { _ in // 逻辑:如果internComment是nil,或者是空白字符串,就隐藏该行 guard let comment = car?.internComment else { return true } return comment.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty } }
二、实现整个分区的隐藏
如果你想实现整个分区无内容时隐藏(比如当car?.name为空时,隐藏"Car"分区),可以给分区本身设置hidden属性:
+++ Section("Car") { section in section.hidden = Condition.function([]) { _ in // 检查分区对应的核心字段是否为空 guard let carName = car?.name else { return true } return carName.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty } } <<< TextRow() { $0.title = car?.name }
三、注意事项
- 如果你的
car对象后续会动态更新(比如网络请求后赋值),更新完car后需要调用form.reload()来触发隐藏条件的重新计算,让表单刷新状态。 - 如果隐藏条件依赖其他表单行的值(而不是model里的值),需要把依赖行的
tag放到Condition.function的参数数组里,比如Condition.function(["OtherTag"]),这样当依赖行变化时,当前行的隐藏状态会自动更新。
内容的提问来源于stack exchange,提问作者Preefix
相关产品推荐
相关产品推荐

