当我跳转到设置页面,在弹出的对话框中点击取消后,会自动返回主页。如何避免这个问题?
import SwiftUI
struct ContentView: View {
@State private var settingActive: Bool = false
var body: some View {
NavigationView {
TabView {
VStack {
NavigationLink(destination: SettingView(), isActive: $settingActive) {
EmptyView()
}
Button {
settingActive.toggle()
} label: {
Text("Setting")
}
}
.padding()
}
}
}
}
struct SettingView: View {
@State private var logoutActive: Bool = false
var body: some View {
VStack {
Button {
logoutActive.toggle()
} label: {
Text("Logout")
}
.confirmationDialog("Logout", isPresented: $logoutActive) {
Button("Logout", role: .destructive) {
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
最佳答案
这似乎是使用 TabView
的问题里面NavigationView
.
您可以通过移动TabView
来解决这个问题成为您的顶级对象(它真正应该在的位置),或替换 NavigationView
与新的NavigationStack
.
这是一个还删除了已弃用的 NavigationLink
的实现方法:
enum Router {
case settings
}
struct ContentView: View {
@State private var path = NavigationPath()
var body: some View {
TabView {
NavigationStack(path: $path) {
VStack {
Button {
path.append(Router.settings)
} label: {
Text("Setting")
}
}
.navigationDestination(for: Router.self) { router in
switch router {
case .settings:
SettingView(path: $path)
}
}
.padding()
}
}
}
}
struct SettingView: View {
@Binding var path: NavigationPath
@State private var logoutActive: Bool = false
var body: some View {
VStack {
Button {
logoutActive = true
} label: {
Text("Logout")
}
.confirmationDialog("Logout", isPresented: $logoutActive) {
Button("Logout", role: .destructive) {
}
}
}
}
}
关于swift - 确认对话框取消 swiftui 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75506095/