swift - 确认对话框取消 swiftui 中的错误

标签 swift swiftui

当我跳转到设置页面,在弹出的对话框中点击取消后,会自动返回主页。如何避免这个问题?


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/

相关文章:

macos - 如何在第二个屏幕上打开新窗口(第二个显示器)

foreach - SwiftUI:如何使用 ForEach 选择多个项目(图像)?

SwiftUI页面控件实现

ios - 如何使用 SwiftUI Picker 更新 Realm 一对一关系?

ios - Quickblox API 因无法识别的选择器而快速崩溃

ios - 使用 Google Maps SDK Swift 创建较小的 map View

ios - iOS7 和 iOS8 之间的 Root View Controller 差异

ios - 无法在模态 Controller View 前面添加 View

ios - 无法使用 Xcode、Swift 3 获取图像 iOS 富推送通知

swift - 前提条件失败 : invalid input index when using GeometryReader in SwiftUI starting with iOS 13. 4