![](/img/trans.png)
[英]How to present a View after tapping an ActionSheet.Button in SwiftUI?
[英]SwiftUI: How to present new views on clicking ActionSheet button?
我有一个包含三个动作的动作表
如果我点击“Action_1”,我的应用程序应该显示 ActionView_1()。 如果我点击“Action_2”,我的应用程序应该显示 ActionView_2()。
我得到这个是为了展示一个观点
.sheet(isPresented: $isAddSecretVisible){ActionView_1()}
。
但这是为了通过单击按钮来呈现视图。
如果点击 Actionsheet 按钮,我需要相同的操作。 在SwiftUI中回答需求
提前致谢。
您应该定义 2 个State
,每个对应一张工作表:
@State var isMainActionPresented = false
@State var isActionViewPresented = false
并确定要呈现的女巫actionSheet
的State
。 所以你可以有一个这样的枚举:
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 将处理剩下的事情。
请注意,您不能一个接一个地链接多个工作表,因为每个工作表都会以某种方式覆盖之前的工作表。
参考链接: SwiftUI
ActionSheet(title: Text("iOSDevCenters"), message: Text("SubTitle"), buttons: [
.default(Text("Action_1"), action: {
print("Action_1")
ActionView_1()
}),
.destructive(Text("Cancel"))
])
})
我有一个包含三个动作的动作表
如果我点击“Action_1”,我的应用应该显示 ActionView_1()。 如果我点击“Action_2”,我的应用应该显示 ActionView_2()。
我得到这个是为了展示一个观点
.sheet(isPresented: $isAddSecretVisible){ActionView_1()}
。
但这用于通过按钮单击呈现视图。
如果点击 Actionsheet 按钮,我需要相同的操作。 SwiftUI中的回答需求
提前致谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.