SwiftUI:如何在单击 ActionSheet 按钮时显示新视图?
SwiftUI: How to present new views on clicking ActionSheet button?
我有一个动作sheet由三个动作组成
- Action_1
- Action_2
- 取消
如果我点击 'Action_1',我的应用程序应该显示 ActionView_1()。
如果我点击 'Action_2',我的应用程序应该显示 ActionView_2()。
我得到这个是为了展示一个观点
.sheet(isPresented: $isAddSecretVisible){ActionView_1()}
.
但这是为了通过单击按钮呈现视图。
如果点击“操作”sheet 按钮,我需要相同的操作。
在 SwiftUI
中回答需求
提前致谢。
参考 link : SwiftUI
ActionSheet(title: Text("iOSDevCenters"), message: Text("SubTitle"), buttons: [
.default(Text("Action_1"), action: {
print("Action_1")
ActionView_1()
}),
.destructive(Text("Cancel"))
])
})
你应该定义2个State
,每个对应一个sheet:
@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 将处理其余部分。
请注意, 你不能一个接一个地链接多个 sheet,因为每个都以某种方式覆盖了前一个。
我有一个动作sheet由三个动作组成
- Action_1
- Action_2
- 取消
如果我点击 'Action_1',我的应用程序应该显示 ActionView_1()。 如果我点击 'Action_2',我的应用程序应该显示 ActionView_2()。
我得到这个是为了展示一个观点
.sheet(isPresented: $isAddSecretVisible){ActionView_1()}
.
但这是为了通过单击按钮呈现视图。
如果点击“操作”sheet 按钮,我需要相同的操作。 在 SwiftUI
中回答需求提前致谢。
参考 link : SwiftUI
ActionSheet(title: Text("iOSDevCenters"), message: Text("SubTitle"), buttons: [
.default(Text("Action_1"), action: {
print("Action_1")
ActionView_1()
}),
.destructive(Text("Cancel"))
])
})
你应该定义2个State
,每个对应一个sheet:
@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 将处理其余部分。
请注意, 你不能一个接一个地链接多个 sheet,因为每个都以某种方式覆盖了前一个。