在 SwiftUI 中点击 ActionSheet.Button 后如何呈现视图?

Grz*_*ski 4 ios swift swiftui

我一直在玩 SwiftUI 并被这个简单的事情难住了。基本上,我试图在点击ActionSheet.Button. 到目前为止,这是我的代码:

struct SomePage: View {
    @State var showSheet = false

    var body: some View {
        Button(action: {
            self.showSheet = true
        }) { 
            Text("Show ation sheet") 
        }.presentation(sheet)
    }

    private var sheet: ActionSheet? {
        let button = ActionSheet.Button.default(Text("Button") {
             self.showSheet = false
             // what now??
        }
        let action = ActionSheet(title: Text("Title"),
                                 message: nil,
                                 buttons: [button])
        return showSheet ? action : nil
    }

    // This is the modal I'm trying to present 
    // after tapping on the action sheet button
    private var modal: Modal {
        return Modal(SomePage())
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试向presentation按钮添加第二个处理程序并切换一个showModal属性,但显然调试器抱怨在第一个仍然呈现时尝试第二个模式演示。

有没有人知道如何使这项工作?

Mat*_*ini 6

你离它不远了。

添加另一个@State来处理模态的呈现。

struct ContentView: View {

    @State var showSheet = false
    @State var showModal = false

    var body: some View {
        Button(action: {
            self.showSheet = true
        }) {
            Text("Show action sheet")
        }
        .actionSheet(isPresented: $showSheet, content: actionSheet)
        .sheet(isPresented: $showModal, content: { Text("Modal") })
    }

    private func actionSheet() -> ActionSheet {
        let button = ActionSheet.Button.default(Text("Show modal")) {
            self.showSheet = false
            self.showModal = true
        }
        let actionSheet = ActionSheet(title: Text("Action Sheet"),
                                      message: nil,
                                      buttons: [button])
        return actionSheet
    }

}
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明

为 Xcode 11 beta 5 更新

  • 我只注意到发生了一件奇怪的事情 - 如果有两个按钮并且每个按钮都连接到模式演示触发器,则只有第二个按钮起作用。还没弄清楚为什么。 (3认同)