Навигационный стек для iOS15.0+IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Навигационный стек для iOS15.0+

Сообщение Anonymous »

Я пытаюсь создать своего рода координатор, который объединяет представления во время навигации и делает его совместимым с 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»