SwiftUI:如何在单击 ActionSheet 按钮时呈现新视图?
Posted
技术标签:
【中文标题】SwiftUI:如何在单击 ActionSheet 按钮时呈现新视图?【英文标题】:SwiftUI: How to present new views on clicking ActionSheet button? 【发布时间】:2019-09-20 04:57:16 【问题描述】:我有一个包含三个操作的操作表
-
Action_1
Action_2
取消
如果我点击“Action_1”,我的应用应该显示 ActionView_1()。 如果我点击“Action_2”,我的应用应该显示 ActionView_2()。
我得到这个是为了展示一个视图
.sheet(isPresented: $isAddSecretVisible)ActionView_1()
.
但这用于通过按钮单击呈现视图。
如果点击 Actionsheet 按钮,我需要相同的操作。 在 SwiftUI
中回答需求提前致谢。
【问题讨论】:
您可以在 actionSheet 按钮内应用相同的逻辑:iosdevcenters.blogspot.com/2019/09/… 嘿,我更新了我的代码和逻辑below。请看一看。 【参考方案1】:您应该定义 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 将处理其余部分。
请注意您不能一个接一个地链接多个工作表,因为每个工作表都会以某种方式覆盖前一个工作表。
【讨论】:
如果您收到错误Function declares an opaque return type, but the return statements in its body do not have matching underlying types
,则将您在ActionViewMode
扩展中返回的视图转换为AnyView
!【参考方案2】:
参考链接:SwiftUI
ActionSheet(title: Text("iOSDevCenters"), message: Text("SubTitle"), buttons: [
.default(Text("Action_1"), action:
print("Action_1")
ActionView_1()
),
.destructive(Text("Cancel"))
])
)
【讨论】:
这不会显示 ActionView_1,只需初始化它。以上是关于SwiftUI:如何在单击 ActionSheet 按钮时呈现新视图?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:UIAlertController ActionSheet 全屏
保存 swiftUI 的用户凭据 - 密码 ActionSheet 调用
如何通过单击 iPhone 故事板中的 ActionSheet 按钮移动到下一个 viewController