swiftui 2个或3个工作表的一个视图?

时间:2019-10-13 19:32:17

标签: swiftui uiactionsheet

我想使用变量在视图中调用不同的操作表。那并不意味着要工作。

.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;
                        })
                        ])
            }

如果我仅用一张操作表进行尝试,它将起作用。我该如何使用第二个?

3 个答案:

答案 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 修饰符。