如何在 SwiftUI 中点击 ActionSheet.Button 后显示视图?
How to present a View after tapping an ActionSheet.Button in 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())
}
}
我已经尝试向按钮添加第二个 presentation
处理程序并切换 showModal
属性 但显然调试器抱怨尝试第二次模式呈现,而第一个是还在展示中。
有没有人知道如何进行这项工作?
你离它不远了。
添加另一个 @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
}
}
结果:
更新 Xcode 11 beta 5
我一直在研究 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())
}
}
我已经尝试向按钮添加第二个 presentation
处理程序并切换 showModal
属性 但显然调试器抱怨尝试第二次模式呈现,而第一个是还在展示中。
有没有人知道如何进行这项工作?
你离它不远了。
添加另一个 @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
}
}
结果:
更新 Xcode 11 beta 5