我想在某些事件(例如单击按钮)上显示ActionSheet(或其他模式,但为Alert)。
我找到了使用状态变量的方法。以这种方式显示它似乎有些奇怪,因为在手动关闭ActionSheet时必须重置变量。
有更好的方法吗?
为什么有一种单独的方法可以显示Alert,从而将其可见性绑定到状态变量?我的方法有什么区别?
struct Sketch : View {
@State var showActionSheet = false
var body: some View {
ZStack {
Button(action: { showActionSheet = true }) { Text("Show") }
}
.presentation(showActionSheet ?
ActionSheet(
title: Text("Action"),
buttons: [
ActionSheet.Button.cancel() {
self. showActionSheet = false
}
])
: nil)
}
}
答案 0 :(得分:1)
为了加强对状态变量方法的偏好,Apple已将其用于警报和操作表API。为了使发现此问题的其他人受益,这里是基于Xcode 11 beta 7,iOS 13的所有3种类型的更新示例。
@State var showAlert = false
@State var showActionSheet = false
@State var showAddModal = false
var body: some View {
VStack {
// ALERT
Button(action: { self.showAlert = true }) {
Text("Show Alert")
}
.alert(isPresented: $showAlert) {
// Alert(...)
// showAlert set to false through the binding
}
// ACTION SHEET
Button(action: { self.showActionSheet = true }) {
Text("Show Action Sheet")
}
.actionSheet(isPresented: $showActionSheet) {
// ActionSheet(...)
// showActionSheet set to false through the binding
}
// FULL-SCREEN VIEW
Button(action: { self.showAddModal = true }) {
Text("Show Modal")
}
.sheet(isPresented: $showAddModal, onDismiss: {} ) {
// INSERT a call to the new view, and in it set showAddModal = false to close
// e.g. AddItem(isPresented: self.$showAddModal)
}
}
答案 1 :(得分:0)
对于问题的模态部分,可以使用PresentationButton
:
struct ContentView : View {
var body: some View {
PresentationButton(Text("Click to show"), destination: DetailView())
}
}
答案 2 :(得分:0)
struct Sketch : View {
@State var showActionSheet = false
var body: some View {
ZStack {
Button(action: { self.showActionSheet.toggle() }) { Text("Show") }
.actionSheet(isPresented: $showActionSheet) {
ActionSheet(title: Text("Test"))
}
}
}
}
这是可行的,@State是属性包装器,您的操作表将密切关注它,只要它变为true,便会显示该操作表</ p>