В SwiftUI листы — это удобный способ представить дополнительный контент или выполнить действия, сохраняя при этом контекст текущего представления. Однако после закрытия листа вам может потребоваться обновить представление, в котором он был представлен. В этой статье блога мы рассмотрим несколько методов обновления представлений SwiftUI после закрытия листа, а также приведем примеры кода.
Метод 1: использование модификатора @State и листа(isPresented:onDismiss:)
Один простой подход — использовать оболочку свойства @State
и модификатор sheet(isPresented:onDismiss:)
. Вот пример:
struct ContentView: View {
@State private var isPresentingSheet = false
@State private var dataToUpdate = ""
var body: some View {
VStack {
Text("Data: \(dataToUpdate)")
Button("Present Sheet") {
isPresentingSheet = true
}
}
.sheet(isPresented: $isPresentingSheet, onDismiss: {
// Perform any necessary updates here
dataToUpdate = "Updated data"
}) {
SheetView()
}
}
}
struct SheetView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
Button("Dismiss") {
presentationMode.wrappedValue.dismiss()
}
}
}
Метод 2: использование обратных вызовов
Другой подход заключается в реализации механизма обратного вызова. Определите свойство замыкания в родительском представлении и передайте его в представление листа. Дочернее представление может затем вызвать закрытие при закрытии. Вот пример:
{
SheetView(onDismiss: { UpdatedData in
dataToUpdate = UpdatedData
})
})
struct SheetView: View {
let onDismiss: (String) ->Void
var body: some View {
Button(“Dismiss”) {
onDismiss(“Обновленные данные”)
Метод 3: использование ObservableObject и Joint
Если вы предпочитаете более продвинутый подход, вы можете использовать протокол ObservableObject
и платформу объединения. Это позволяет публиковать изменения из дочернего представления и подписываться на них в родительском представлении. Вот пример:
{
SheetView(dataStore: dataStore)
})
struct SheetView: View {
@Environment(\.presentationMode) varpresentationMode
@ObservedObject var dataStore: DataStore
var body: some View {
Button(“Dismiss”) {
dataStore.updatedData = “Обновленные данные”
presentationMode.wrappedValue.dismiss()
>
Обновить представления SwiftUI после закрытия листа можно различными способами. Используя @State
и модификатор sheet(isPresented:onDismiss:)
, реализуя обратные вызовы или используя ObservableObject
и сочетание, вы можете обновить содержимое родительского представления после закрытия листа. Выберите метод, который лучше всего соответствует требованиям вашего проекта, и улучшите взаимодействие с пользователем в ваших приложениях SwiftUI.