Использование NavigationView
NavigationView
s привязаны к NavigationButton
(AFAIK, который является единственным способом вызвать переход). Вот простой пример, когда основной вид может переходить в подробный вид.
struct DetailView : View {
let value: String
var body : some View {
Text("Full View: \(value)")
}
}
struct MainView : View {
var body : some View {
NavigationView {
NavigationButton(destination: DetailView(value: "Hello World"),
label: { Text("Click Me") })
}
}
}
Это автоматически обработает переходы и добавит кнопку возврата.
Использование состояния
Другой подход заключается в использовании переменной с состоянием для определения, отображается ли дочернее представление. Вот еще один простой пример:
struct DetailView : View {
let value: String
let onDone: () -> Void
var body : some View {
VStack {
Text("Full View: \(value)")
Button(action: onDone, label: { Text("Back") })
}
}
}
struct MainView : View {
@State var displaySubview = false
var body : some View {
VStack {
if displaySubview {
DetailView(value: "Hello World") {
self.displaySubview = false
}
} else {
Button(action: {
self.displaySubview = true
}, label: { Text("Click Me") })
}
}
}
}
Этот подход требует реализации большего количества элементов пользовательского интерфейса, но также обеспечивает больший контроль над представлениями.