gpt4 book ai didi

ios - SwiftUI:如何在单击 ActionSheet 按钮时呈现新 View ?

转载 作者:行者123 更新时间:2023-11-29 05:27:30 27 4
gpt4 key购买 nike

我有一个包含三个操作的操作表

  1. Action_1
  2. Action_2
  3. 取消

如果我点击“Action_1”,我的应用程序应显示 ActionView_1()。如果我点击“Action_2”,我的应用程序应该显示 ActionView_2()。

我得到这个是为了展示一个 View

.sheet(isPresented: $isAddSecretVisible){ActionView_1()}

但这用于通过单击按钮来呈现 View 。

如果点击“操作表”按钮,我需要执行相同的操作。在 SwiftUI 中满足需求

提前致谢。

最佳答案

您应该定义 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()
}
}
}

然后单击任何 ButtonActionSheet.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 将处理剩下的事情。

请注意您不能将多个工作表依次链接起来,因为每个工作表都会以某种方式覆盖前一个工作表。

关于ios - SwiftUI:如何在单击 ActionSheet 按钮时呈现新 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58022002/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com