当 .interactiveDismissDisabled 设置为 true 时,如何确定用户是否尝试关闭工作表?

问题描述 投票:0回答:1

我向用户呈现一个工作表视图,他们可以在其中编辑一些信息。如果他们确实更改了某些内容,我将设置

.interactiveDismissDisabled(true)
以防止用户在有一些未保存的更改时关闭视图。

为了使此体验更加完整,我还想显示一个类似于“您确定要忽略更改吗”的提示?

我在弄清楚如何检测用户提出此提示的“滑动以消除”尝试时遇到问题,同时还保持

.interactiveDismissDisabled(true)
以确保在用户确认提示之前不会消除该工作表。

ios swiftui
1个回答
0
投票

我能想到的一种方法是添加一个非常小的演示制动装置(除了您的床单支持的制动装置之外)。

如果当前的制动装置变为这个非常小的制动装置,则意味着用户试图关闭该工作表。然后,您可以将制动器设置回其原始值,并显示警报,或执行任何您想要执行的操作。

这是一个简单的例子:

@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") {}
            }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.