我遇到了一个问题,这个问题源于一个操作表中的按钮打开了附加到ZStack不同子视图的另一个操作表。我不知道为什么,但有时第二个操作表会出现,有时不会。我认为将状态更改代码 Package 在DispatchQueue.main.async { }中会在主线程上运行代码,从而解决这个问题,但有时,当按下“显示AS 2”按钮时,第二个操作表不会出现。2非常感谢对这个问题的任何帮助。
我有个东西看起来像这样:
我有一个包含2个状态变量的普通视图:
@State 变量显示操作表1 =假 @State 变量显示操作表2 =假
视图的主体如下所示:
ZStack {
HStack {
Spacer()
Button(action: {
showActionSheet1 = true
}, label: {
}).actionSheet(isPresented: $showActionSheet1) {
ActionSheet(
title: Text("Select an option"),
buttons: [
.cancel(),
.default(Text("Tap to Do Something")) {
print("Do something")
},
.default(Text("Show AS2")) {
//showing the other action sheet
DispatchQueue.main.async {
showActionSheet2 = true
}
}
]
)
}
}
VStack {
Spacer()
HStack {
Spacer()
Text("Element")
}
}.actionSheet(isPresented: $showActionSheet2) {
ActionSheet(
title: Text("Select an option"),
buttons: [
.cancel(),
.default(Text("Tap to Do Something on second sheet")) {
print("Do something")
},
.default(Text("tap to do something on second sheet 2")) {
//showing the other action sheet
print("Do something 2")
}
]
)
}
}
2条答案
按热度按时间f4t66c6m1#
一个屏幕上只能有一个ActionSheet,当一个ActionSheet关闭时,它需要时间(由于动画)从屏幕上消失。在此时间内,无法显示第二个ActionSheet。
解决方案是延迟一点激活第二张纸。(实际上在真实的的最终用户流程中很少需要,但最好考虑到这些细节)
gstyhher2#
@Asperi是对的,每个视图只能有一个.actionSheet。
您可以通过使用三元运算符来实现这一点。
Xcode 14.1示例: