请帮我摆脱这个问题:
重现问题的步骤:
1.点击"编辑我的姓名"按钮
1.在. sheet中,点击TextField,然后在键盘仍显示的情况下,一直向下滚动
1.点击按钮"删除姓名"
1.* * 问题是**
- confirmationDialog仅出现一秒钟,然后消失,不给用户任何机会(或少于一秒钟的机会)点击confirmationDialog的按钮之一!**
下面是我的代码:
ContentView.swift
import SwiftUI
struct ContentView: View {
@State private var myName = "Joe"
@State private var isEditingName = false
var body: some View {
Text("My name is: \(myName)")
Button("Edit My Name") {
isEditingName = true
}
.padding()
.sheet(isPresented: $isEditingName) {
EditView(name: $myName)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
EditView.swift
import SwiftUI
struct EditView: View {
@Binding var name: String
@State private var isShowingConfirmationDialog = false
var body: some View {
Form {
Section {
TextField("Name", text: $name)
}
Section {
VStack {
ForEach(0..<50, id: \.self) { number in
Text("\(number)")
}
}
}
Section {
deleteNameWithConfirmationDialog
}
}
}
private var deleteNameWithConfirmationDialog: some View {
Button("Delete Name", role: .destructive) {
isShowingConfirmationDialog = true
}
.confirmationDialog("Are you sure you want to delete name?", isPresented: $isShowingConfirmationDialog) {
Button("Delete Name", role: .destructive) {
name = ""
}
Button("Cancel", role: .cancel) { }
} message: {
Text("Are you sure you want to delte name?")
}
}
}
struct EditView_Previews: PreviewProvider {
static var previews: some View {
EditView(name: .constant(String("Joe")))
}
}
2条答案
按热度按时间ct3nt3jp1#
如果您将
.confirmationDialogue
移出Form
,则可以正常工作:kyxcudwk2#
如果您希望将
.confirmationDialog
保留在Form
中,或者如果您正在使用.confirmationDialog
来管理List
中的删除项,您还可以通过从.swipeActions
中的deleteButton中排除.destructive
角色来避免立即解除。