After switching from NavigationView to NavigationStack, clicking ‘Edit’ in the DetailView does not work as expected.
However, the page navigates normally when ‘@Environment(.dismiss) var dismiss’ in DetailView is removed.
Thank you for your answer.
ContentView.swift
struct ContentView: View {
var body: some View {
NavigationStack {
NavigationLink("Detail") {
DetailView()
}
.buttonStyle(.bordered)
NavigationLink("About") {
AboutView()
}
.buttonStyle(.bordered)
}
.navigationTitle("Home Page")
}
}
DetailView.swift
struct DetailView: View {
@Environment(.dismiss) var dismiss
@State var info: String = "Hello"
var body: some View {
VStack {
Text(info)
HStack {
// Need a button to trigger and return to the previous page
Button("Back") {
dismiss()
}
.buttonStyle(.bordered)
// Why can't I navigate to the Edit page?
NavigationLink("Edit") {
EditView() { data in
info = data
}
}
.buttonStyle(.bordered)
}
}
.navigationTitle("Detail Page")
}
}
EditView.swift
struct EditView: View {
@Environment(.dismiss) var dismiss
let action: (String) -> Void
var body: some View {
VStack {
Button("Save") {
action("Hello World.") // Need to return some information.
dismiss()
}
.buttonStyle(.bordered)
}
.navigationTitle("Edit Page")
}
}
AboutView.swift
struct AboutView: View {
@State private var isPresentWebView = false
var body: some View {
Button("Show website") {
isPresentWebView = true
}
.buttonStyle(.bordered)
.fullScreenCover(isPresented: $isPresentWebView) {
SafariWebView(url: URL(string: "https://stackoverflow.com")!)
.ignoresSafeArea()
}
}
}
struct SafariWebView: UIViewControllerRepresentable {
let url: URL
func makeUIViewController(context: Context) -> SFSafariViewController {
return SFSafariViewController(url: url)
}
func updateUIViewController(_ uiViewController: SFSafariViewController, context: Context) {
}
}
New contributor
Jake is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.