Я сделал форму со списком контрольных строк и двумя сегментами, где пользователь может либо выбрать все элементы в списке, либо ничего.
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 моего списка check row проверял, какой режим активен, но это не сработало.
enum InheritorFilterMode {
case filterAll, filterNone
}
...
var inheritorFilterMode: InheritorFilterMode = .filterAll
Я также попытался получить значение сегментов, получив тег:
let segmentedRow: SegmentedRow<Int>! = self.form.rowBy(tag: "segments")
но и этот подход не сработал.
Любые предложения о том, как обновить флажки при изменении сегмента?