Я занимаюсь разработкой приложения со следующей структурой ContentView
ContentView {
---HeaderView
---Collection view using QGrid (An Array of Cells), data source: an array of Structs
---A Detail View of data from a single data Struct from the data array
}
Цель состоит в том, чтобы обновить дочернее представление Detail с данными из повернутой ячейки в QGrid. У меня есть вид ячейки, который распознает касания и правильно сообщает, какая ячейка для консоли. .OnTap корректно изменяет представление Cell, но я могу только прикрепить настройку Preference за пределами представления Cell, поэтому он вызывает изменение Pref каждый раз, когда ячейка отображается в QGrid, оставляя сообщенную ячейку как последнюю в сетке, но никогда не обновляет выбранную ячейку при нажатии!
struct GlyphCell: View {
var glyph:Glyph
var body: some View {
ZStack {
Text("\(glyph.Hieroglyph)")
.lineLimit(1)
.padding(.all, 12.0)
.font(.system(size: 40.0))
.background(Color.yellow)
Text("\(glyph.Gardiner)")
.offset(x: 12, y: 26)
.foregroundColor(.blue)
}.onTapGesture {
print("Tap on \(self.glyph.Gardiner)")
DispatchQueue.main.async {
// would like to update preference in here!
}
}
.preference(key: TappedGlyphPreferenceKey.self, value: self.glyph)
.cornerRadius(6.0)
.frame(width: 90.0, height: 100.0, alignment: .center)
.previewLayout(.sizeThatFits)
}
}
Может ли это быть достигнуто с помощью этого подхода, т. е. передачи Pref до родительского представления, а затем до целевого представления Detail? Я попробовал обертки State и Observables для выбранных данных Struct, но с ними ничего не вышло. Любые мысли приветствуются!
Обновление: у меня должно быть неправильное понимание State / Bind. У меня есть переменная @State структуры данных в родительском представлении содержимого, которое я использую для обновления дочернего представления. Когда я добавил @Bind этой переменной Struct в подпредставление Cell, мне нужно, чтобы компилятор добавил эту переменную в список параметров для Sub-view Cell. Когда я добавляю это, я получаю все виды ошибок. Я попробовал несколько вариантов, но отказался от Bind, чтобы попробовать префы. Напомним, я хочу передать выбранную структуру ячеек вверх по дереву, а затем перейти к деталям. Я могу попытаться воссоздать ошибку, если вы достаточно щедры, чтобы взглянуть.