我需要在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()])
}
您可以通过以下类似的方法来实现;
@State var flag: Bool = false
@State var options: [(String, () -> Void)] = [
("Option - 1", { print("option1 selected")}),
("Option - 2", { print("option2 selected")}),
("Option - 3", { print("option3 selected")})
]
var body: some View {
Button("Show action sheet") {
self.flag = true
}
.actionSheet(isPresented: self.$flag, content: {
var buttons: [ActionSheet.Button] = options.map {
ActionSheet.Button.default(Text($0.0), action: $0.1)
}
buttons.append(.cancel())
return ActionSheet(title: Text("Select an option"), buttons: buttons)
})
}
这里是可能的解决方案。经过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()]) }
然后您可以使用
.actionSheet(isPresented: self.$showSheet, content: {
// assuming you have `currentOptions` (or similar) property for dynamic
// options
self.generateActionSheet(options: self.currentOptions)
})