在下面的代码中,无论我将第二个附加到哪里,.actionSheet
我都无法使它们工作。我的理解是,只要他们执着于不同的观点,它就会起作用,但这个理论似乎并不正确。
struct ContentView: View {
@State private var showFirstActionSheet = false
@State private var showSecondActionSheet = false
var body: some View {
VStack{
VStack{
Button("Show Fist Action Sheet"){
showFirstActionSheet = true
}
.actionSheet(isPresented: $showFirstActionSheet) {
ActionSheet(title: Text("First Action Sheet"), message:
Text("Some message!"),
buttons: [
.destructive(Text("Cancel")){
},
.default(Text("Yes")){
doSomething()
},
.cancel()
])
}
}
}
.actionSheet(isPresented: $showSecondActionSheet) {
ActionSheet(title: Text("Second Action Sheet"), message:
Text("Some message!"),
buttons: [
.destructive(Text("Cancel")){
},
.default(Text("Yes")){
},
.cancel()
])
}
}
func doSomething(){
showSecondActionSheet = true
}
}
我尝试使用两个不同的按钮,它起作用了,但就我而言,我只有一个按钮触发第一个按钮,第二个按钮由第一个 actionSheet 触发。
知道处理这个问题的最佳方法是什么吗?
如果您只是将
actionSheet
代码中的所有 s 更改为confirmationDialog
,它就完全可以正常工作。actionSheet
已在 iOS 17 中弃用。Alert.Button
您可以使用Button
不同的 s 创建常规 s ,而不是使用 的工厂方法role
。如果您遇到需要通过第一个操作表的按钮触发第二个操作表的情况,您可以相应地修改代码。一种方法是使用状态变量来控制两个操作表并按顺序管理它们的表示。这是一个例子:
在第一个操作表中点击“是”按钮,会将 showSecondActionSheet 设置为 true,从而触发第二个操作表的呈现。
通过调整,您可以根据用户交互来控制操作表演示的流程。根据您的具体要求调整第二个操作表按钮中的逻辑。