我想使用变量在视图中调用不同的操作表。那并不意味着要工作。
.actionSheet(isPresented: self.$neuinitialisierung) {
ActionSheet(
title: Text("Testtitel 1"),
message: Text("Testmessage 1"),
buttons: [
.default(Text("Button 1"),
action: {
print("KLICK")
}),
.default(Text("Button 2"),
action: {
self.clouddienst_waehlen = true;
})
])
}
.actionSheet(isPresented: self.$clouddienst_waehlen) {
ActionSheet(
title: Text("Testtitel 2"),
message: Text("Testmessage 2"),
buttons: [
.default(Text("Button 1"),
action: {
print("KLICK")
}),
.default(Text("Button 2"),
action: {
self.clouddienst_waehlen = true;
})
])
}
如果我仅用一张操作表进行尝试,它将起作用。我该如何使用第二个?
答案 0 :(得分:1)
我想出了以下解决方案:
@State var showingMenu = false
@State var optionsMenu: OptionsMenu = .main
enum OptionsMenu { case main, export }
...
.actionSheet(isPresented: $showingMenu) {
if self.optionsMenu == .main {
return ActionSheet(title: Text("Main Menu"), buttons: [
.default(Text("Export Menu")) {
delay(0.1) {
self.optionsMenu = .export
self.showingMenu = true
}
}
.destructive(Text("Close"))
])
} else {
return ActionSheet(title: Text("Export Menu"), buttons: [
.default(Text("Export timeline as GPX")) {
// TODO
},
.default(Text("Export timeline as JSON")) {
// TODO
},
.destructive(Text("Close"))
])
}
}
打开第一个菜单的按钮需要确保重置枚举值,否则在下一次点击按钮时将打开错误的菜单:
Button(action: {
self.optionsMenu = .main
self.showingMenu = true
}) {
Image(systemName: "ellipsis")
}
答案 1 :(得分:0)
您可以使用:
func actionSheet<T>(item: Binding<T?>, content: (T) -> ActionSheet) -> some View where T : Identifiable
它需要绑定到某种可选对象,并且如果该值不为nil,则会显示一个ActionSheet。无需将标志设置为true,您可以将此可选参数设置为某个值。
答案 2 :(得分:0)
不需要任何这些复杂的解决方案。只需将您的 .actionSheets 附加到不同的视图。它不需要在根级别。例如,您可以在按钮上使用 .actionSheet 修饰符。