Я пытаюсь создать своего рода координатор, который объединяет представления во время навигации и делает его совместимым с iOS 15.0.
Вот мой код, который работает для первого перехода к следующему представлению, но после перехода к третьему просмотр, он возвращается к первому...
Я открыт для любых советов, но мне нужно поддерживать совместимость с iOS15.
Вот мой код:
import SwiftUI
import Combine
final class FlowCoordinator: ObservableObject {
@Published var selection: String?
private var cancellables = Set()
init() {
addOberver()
}
func showView(_ view: String) {
selection = view
}
func addOberver() {
$selection
.sink { newString in
print(newString ?? "")
}
.store(in: &cancellables)
}
func repeatPrints() {
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in
print(self.selection ?? "")
}
}
}
struct ContentView: View {
@StateObject var coordinator = FlowCoordinator()
var body: some View {
NavigationView {
MainListScreen()
.navigationTitle("Main List")
}
.environmentObject(coordinator)
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct MainListScreen: View {
@EnvironmentObject var coordinator: FlowCoordinator
var body: some View {
VStack {
NavigationLink(destination: MealDetailsScreen(),
tag: "MealDetailsScreen",
selection: $coordinator.selection) {
EmptyView()
}
Button(action: {
coordinator.showView("MealDetailsScreen")
}) {
Text("Go to Meal Details")
}
}
}
}
struct MealDetailsScreen: View {
@EnvironmentObject var coordinator: FlowCoordinator
var body: some View {
VStack {
NavigationLink(destination: MealMultimediaScreen(),
tag: "MealMultimediaScreen",
selection: $coordinator.selection) {
EmptyView()
}
Button(action: {
coordinator.showView("MealMultimediaScreen")
}) {
Text("Go to Meal Multimedia")
}
}
.navigationTitle("Meal Details")
}
}
struct MealMultimediaScreen: View {
@EnvironmentObject var coordinator: FlowCoordinator
var body: some View {
VStack {
NavigationLink(destination: Text("Last View"),
tag: "Text",
selection: $coordinator.selection) {
EmptyView()
}
Button(action: {
coordinator.showView("Text")
}) {
Text("Go to Text")
}
}
.navigationTitle("Meal Multimedia")
}
}
#Preview {
ContentView()
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... or-ios15-0
Навигационный стек для iOS15.0+ ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как сбросить навигационный стек при повторном зажаре одной и той же вкладки?
Anonymous » » в форуме C# - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как сбросить навигационный стек при повторном зажаре одной и той же вкладки?
Anonymous » » в форуме C# - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Swiftui - Изменения модели в основном представлении. Увольняет навигационный стек
Anonymous » » в форуме IOS - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как очистить навигационный стек после навигации по другому фрагменту в Android
Anonymous » » в форуме Android - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
«Окно не определено», но стек выглядит неверно; Как получить точный стек вызовов?
Anonymous » » в форуме Javascript - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-