在另一个在 SwiftUI 中不起作用的操作表之后立即显示第二个操作表

问题描述 投票:0回答:1

在下面的代码中,无论我将第二个

.actionSheet
附加到哪里,我都无法使它们工作。我的理解是,只要他们执着于不同的观点,它就会起作用,但这个理论似乎并不正确。

结构ContentView:视图{

    @State private var showFirstActionSheet = false
    @State private var showSecondActionSheet = false
    
    var body: some View {
        VStack{
            VStack{
                Button("Show Fist Action Sheet"){
                    showFirstActionSheet = true
                }
                .actionSheet(isPresented: $showFirstActionSheet) {
                    ActionSheet(title: Text("First Action Sheet"), message:
                                    Text("Some message!"),
                                buttons: [
                                    .destructive(Text("Cancel")){
                                        
                                    },
                                    .default(Text("Yes")){
                                        doSomething()
                                    },
                                    .cancel()
                                ])
                }
            }
        }
        .actionSheet(isPresented: $showSecondActionSheet) {
            ActionSheet(title: Text("Second Action Sheet"), message:
                            Text("Some message!"),
                        buttons: [
                            .destructive(Text("Cancel")){
                               
                            },
                            .default(Text("Yes")){
                                
                            },
                            .cancel()
                        ])
        }
    }
    
    func doSomething(){
        showSecondActionSheet = true
    }
}

我尝试使用两个不同的按钮,它起作用了,但就我而言,我只有一个按钮触发第一个按钮,第二个按钮由第一个actionSheet触发。

知道处理这个问题的最佳方法是什么吗?

swift swiftui
1个回答
0
投票

如果您有一个场景,第二个操作表需要由第一个操作表的按钮触发,您可以相应地修改您的代码。一种方法是使用状态变量来控制两个操作表并按顺序管理它们的表示。这是一个例子:

struct ContentView: View {
    @State private var showFirstActionSheet = false
    @State private var showSecondActionSheet = false
    
    var body: some View {
        VStack {
            VStack {
                Button("Show First Action Sheet") {
                    showFirstActionSheet = true
                }
                .actionSheet(isPresented: $showFirstActionSheet) {
                    ActionSheet(
                        title: Text("First Action Sheet"),
                        message: Text("Some message!"),
                        buttons: [
                            .destructive(Text("Cancel")) {

                            },
                            .default(Text("Yes")) {
                                showSecondActionSheet = true
                            },
                            .cancel()
                        ]
                    )
                }
            }
        }
        .actionSheet(isPresented: $showSecondActionSheet) {
            ActionSheet(
                title: Text("Second Action Sheet"),
                message: Text("Some message!"),
                buttons: [
                    .destructive(Text("Cancel")) {

                    },
                    .default(Text("Yes")) {

                    },
                    .cancel()
                ]
            )
        }
    }
}

在第一个操作表中点击“是”按钮,会将 showSecondActionSheet 设置为 true,从而触发第二个操作表的呈现。

通过调整,您可以根据用户交互控制操作表演示的流程。根据您的具体要求调整第二个操作表按钮中的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.