簡體   English   中英

當細分市場發生變化時,如何在 Eureka 中更新我的列表?

[英]How can I update my list in Eureka when the segment is changing?

我制作了一個帶有檢查行列表和兩個部分的表單,用戶可以選擇選擇列表中的所有項目或不選擇任何項目。

 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")

但這種方法並不奏效。

關於如何在分段更改時更新復選框的任何建議?

我不太確定我是否理解這個問題。 但我會盡力回答。

復選標記本身只是一個附件類型,它改變了行的值(檢查repo以供參考:

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

因此,與其過濾結果(這不應該像您那樣工作),您應該循環表單中的所有行。 有一個方法form.allRows()允許您遍歷表單中的所有行,然后您只需要檢查哪個段 - 在您的情況下是“全部”或“無” - 被選中:

因此,在SegmentedRowonChange塊中,您可以執行以下操作:

.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文檔。 也許值得嘗試一下 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM