Чтобы обновить представление SwiftUI после закрытия листа, вы можете использовать различные методы в зависимости от ваших конкретных требований. Вот несколько подходов, которые вы можете использовать:
Метод 1: использование объекта среды
- Создайте класс
ObservableObject
, содержащий состояние, которое вы хотите обновить. - Вставьте этот объект в иерархию представлений с помощью модификатора
environmentObject(_:)
. - Когда лист закрыт, измените состояние
ObservableObject
, чтобы вызвать обновление представлений, которые его наблюдают.
Вот пример:
import SwiftUI
class RefreshState: ObservableObject {
@Published var shouldRefresh = false
}
struct ContentView: View {
@EnvironmentObject var refreshState: RefreshState
@State private var isPresentingSheet = false
var body: some View {
Button("Show Sheet") {
isPresentingSheet = true
}
.sheet(isPresented: $isPresentingSheet) {
SheetView(isPresented: $isPresentingSheet)
.onDisappear {
refreshState.shouldRefresh.toggle()
}
}
.padding()
.refreshable {
// Perform the refresh action here
}
}
}
struct SheetView: View {
@Binding var isPresented: Bool
var body: some View {
Button("Close Sheet") {
isPresented = false
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environmentObject(RefreshState())
}
}
Метод 2: использование переменной состояния
- Создайте в представлении переменную
@State
, которую хотите обновить. - Когда лист закрыт, измените значение переменной
@State
, чтобы запустить обновление представления.
Вот пример:
struct ContentView: View {
@State private var isPresentingSheet = false
@State private var refreshFlag = false
var body: some View {
Button("Show Sheet") {
isPresentingSheet = true
}
.sheet(isPresented: $isPresentingSheet) {
SheetView(isPresented: $isPresentingSheet, refreshFlag: $refreshFlag)
}
.padding()
.refreshable {
// Perform the refresh action here
}
}
}
struct SheetView: View {
@Binding var isPresented: Bool
@Binding var refreshFlag: Bool
var body: some View {
Button("Close Sheet") {
isPresented = false
refreshFlag.toggle()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
В обоих методах обновление запускается путем изменения переменной состояния при закрытии листа. Это изменение приводит к повторной визуализации представления и запуску действия обновления, если представление обновляется.