我向用户呈现一个工作表视图,他们可以在其中编辑一些信息。如果他们确实更改了某些内容,我将设置
.interactiveDismissDisabled(true)
以防止用户在有一些未保存的更改时关闭视图。
为了使此体验更加完整,我还想显示一个类似于“您确定要忽略更改吗”的提示?
我在弄清楚如何检测用户提出此提示的“滑动以消除”尝试时遇到问题,同时还保持
.interactiveDismissDisabled(true)
以确保在用户确认提示之前不会消除该工作表。
我能想到的一种方法是添加一个非常小的演示制动装置(除了您的床单支持的制动装置之外)。
如果当前的制动装置变为这个非常小的制动装置,则意味着用户试图关闭该工作表。然后,您可以将制动器设置回其原始值,并显示警报,或执行任何您想要执行的操作。
这是一个简单的例子:
@State var sheet = false
@State var alert = false
@State var currentDetent = PresentationDetent.large
var body: some View {
Button("Show Sheet") {
sheet = true
}
.sheet(isPresented: $sheet) {
Text("Sheet Content")
.interactiveDismissDisabled()
.presentationDetents([.large, .height(1)], selection: $currentDetent)
.onChange(of: currentDetent) { oldValue, newValue in
if newValue == .height(1) {
alert = true
currentDetent = oldValue
}
}
.alert("Are you sure?", isPresented: $alert) {
Button("Yes") {
sheet = false
}
Button("No") {}
}
}
}