SwiftUI - ActionSheet 中的动态按钮列表

Ken*_*ung 3 swiftui swiftui-actionsheet

我需要在ActionSheet. 假设我有一系列选项["Option1", "Option2"],我该如何实现?

.actionSheet(isPresented: self.$showSheet, content: {
        ActionSheet(title: Text("Select an option"), buttons: [
            .default(Text("Option1")){self.option = 1},
            .default(Text("Option2")){self.option = 2},
            .default(Text("Option3")){self.option = 3},
            .default(Text("Option4")){self.option = 4},
            .cancel()])
    }
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 5

这是可能的解决方案。使用 Xcode 11.4 / iOS 13.4 测试

具有辅助功能

func generateActionSheet(options: [String]) -> ActionSheet {
    let buttons = options.enumerated().map { i, option in
        Alert.Button.default(Text(option), action: { self.option = i + 1 } )
    }
    return ActionSheet(title: Text("Select an option"), 
               buttons: buttons + [Alert.Button.cancel()])
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用

.actionSheet(isPresented: self.$showSheet, content: {
   // assuming you have `currentOptions` (or similar) property for dynamic
   // options
   self.generateActionSheet(options: self.currentOptions)
})
Run Code Online (Sandbox Code Playgroud)