#ios #swift #swiftui
#iOS #swift #swiftui
Вопрос:
В моем приложении есть один главный экран, который использует пользователь, затем, как только они закончат, перейдите к другому представлению, которое в настоящее время реализовано как .fullscreencover
. Я хочу, чтобы пользователь мог нажать кнопку, и приложение в значительной степени сбрасывается, возвращая все к тому, что есть, когда приложение запускается в первый раз, и сбрасывает все переменные и классы.
Единственный метод, который я пробовал, — это снова открыть представление поверх окончательного представления, однако это не приводит к его сбросу. Вот код, который я пробовал, но не работает:
Button("New Game"){
newGame.toggle()
}
.fullScreenCover(isPresented: $newGame){
ContentView()
}
Наряду с этим я пробовал просмотр навигации, однако это вызывает больше проблем с функциональностью моего приложения.
Есть ли строка кода, которая позволяет вам это сделать?
Ответ №1:
Возможный подход заключается в использовании глобального состояния приложения
class AppState: ObservableObject {
static let shared = AppState()
@Published var gameID = UUID()
}
и зависит ли от этого представление корневого содержимого gameID
@main
struct SomeApp: App {
@StateObject var appState = AppState.shared // << here
var body: some Scene {
WindowGroup {
ContentView().id(appState.gameID) // << here
}
}
}
и теперь, чтобы вернуть все в исходное состояние из любого места, мы просто устанавливаем новый gameID
:
Button("New Game"){
AppState.shared.gameID = UUID()
}
Комментарии:
1. Этот класс, похоже, блокирует
presentationMode.wrappedValue.dismiss()
строку, когда я пытаюсь вернуться к представлению? Должен ли я что-то там менять?