首页 > 解决方案 > 当细分发生变化时,如何在 Eureka 中更新我的列表?

问题描述

我制作了一个带有检查行列表和两个部分的表单,用户可以选择选择列表中的所有项目或不选择任何项目。

 private func setupForm() -> Void {
        
        guard let inheritorList = getInheritorList() else {
            return
        }

        
        form +++ Section()
            
            <<< LabelRow() { row in
                row.title = "Choose between multiple inheritors"
            }
            
            <<< SegmentedRow<Int>("segments") { row in
                row.options = [1,2]
                row.displayValueFor = { idx in
                    if idx == 1 {
                        return "All"
                    } else {
                        return "None"
                    }
                }
            }
            .onChange({ row in
                if row.value! == 1 {
                    //All checkboxes should be selected
                    self.inheritorFilterMode = .filterAll
                } else {
                    //All checkboxes should be deselected
                    self.inheritorFilterMode = .filterNone
                }
            })
        
        for inheritor in inheritorList {
                    form.last! <<< CheckRow("inheritors") { listRow in
                        listRow.title = inheritor.name
                        listRow.value = nil
                    }
                    .onChange({ row in
                        if row.value! {
                            self.inheritorsArray.insert(row.tag!)
                        } else {
                            self.inheritorsArray.remove(row.tag!)
                        }
                        
                    })
        }
    }
    

这将创建一个包含上述指定继承者列表和两个段的列表。我的问题是我不知道如何获取分段行的值。

我尝试创建一个枚举并根据 分段行方法的onChange中的值更改过滤器模式。然后,我稍后会在我的检查行列表的onChange中检查哪种模式处于活动状态,但这不起作用。

enum InheritorFilterMode {
    case filterAll, filterNone
}
...

var inheritorFilterMode: InheritorFilterMode = .filterAll

我还尝试通过获取标签来获取段的值:

let segmentedRow: SegmentedRow<Int>! = self.form.rowBy(tag: "segments")

但这种方法也没有奏效。

关于在细分更改时如何更新复选框的任何建议?

标签: iosswifteureka-forms

解决方案


我不太确定我是否理解了这个问题。但我会尽力回答。

复选标记本身只是一种附件类型,它会更改行的值(检查repo以供参考:

 accessoryType = row.value == true ? .checkmark : .none

因此,您应该循环表单中的所有行,而不是过滤结果(这不应该像您那样工作)。有一种方法form.allRows()允许您遍历表单中的所有行,然后您只需要检查选择了哪个段 - 在您的情况下为“全部”或“无”:

因此,在SegmentedRow的onChange块中,您可以执行以下操作:

.onChange({ segmentedRow in
   for row in self.form.allRows {
      if row is CheckRow {
        if segmentedRow.value == "All" {
           row.baseValue = true
        } else if segmentedRow.value == "None" {
            row.baseValue = false
          }
          // don't forget to call update cell - otherwise the cell won't update
          row.updateCell()
      }
   }
})

另外:您可以只使用String,而不是使用基于Interger的行类型:

<<< SegmentedRow<String>("yourTagHere") { (segment) in 
    segment.options = ["All","None"]
...

我自己没有测试它,但它应该可以解决问题。我花了 10 分钟阅读了 GitHub 上的Eureka文档。也许值得尝试一下 ;)


推荐阅读