我有一个动作表,其中包含三个动作
如果我点击“ Action_1”,则我的应用应显示ActionView_1()。 如果我点击“ Action_2”,则我的应用应显示ActionView_2()。
我之所以提出这个观点是
.sheet(isPresented: $isAddSecretVisible){ActionView_1()}
。
但这用于通过单击按钮呈现视图。
如果点击“动作表”按钮,我需要执行相同的动作。 在 SwiftUI
中回答需求谢谢。
答案 0 :(得分:0)
参考链接:SwiftUI
ActionSheet(title: Text("iOSDevCenters"), message: Text("SubTitle"), buttons: [
.default(Text("Action_1"), action: {
print("Action_1")
ActionView_1()
}),
.destructive(Text("Cancel"))
])
})
答案 1 :(得分:0)
您应该定义2个State
,每个工作表分别定义一个:
@State var isMainActionPresented = false
@State var isActionViewPresented = false
还有一个State
用于确定要呈现的女巫actionSheet
。因此,您可以为此提供一个枚举:
enum ActionViewMode {
case first
case second
}
还有一个辅助扩展程序:
extension ActionViewMode {
var view: some View {
switch self {
case .first: return ActionView1()
case .second: return ActionView2()
}
}
}
然后单击任何Button
或ActionSheet.Button
,切换所需的状态。查看下面的完整ContentView
代码:
@State var actionViewMode = ActionViewMode.first
@State var isMainActionPresented = false
@State var isActionViewPresented = false
var body: some View {
Button(action: {
self.isMainActionPresented = true
}) {
Text("ActionSheet")
}
.actionSheet(isPresented: $isMainActionPresented) {
ActionSheet(
title: Text("Title"),
message: Text("Message"),
buttons: [
.default(
Text("Action_1"),
action: {
self.actionViewMode = .first
self.isActionViewPresented = true
}),
.default(
Text("Action_2"),
action: {
self.actionViewMode = .second
self.isActionViewPresented = true
}),
.cancel()
])
}
.sheet(isPresented: $isActionViewPresented) {
self.actionViewMode.view
}
}
SwiftUI将处理其余的内容。
请注意,您不能一个接一个地链接多个工作表,因为每个工作表都会以某种方式覆盖前一个工作表。