SwiftUI:在用户滑动以关闭时显示警报

Posted

技术标签:

【中文标题】SwiftUI:在用户滑动以关闭时显示警报【英文标题】:SwiftUI: Present alert on user swiping to dismiss 【发布时间】:2020-07-22 02:26:24 【问题描述】:

只是想知道 --- 截至 2020 年 --- SwiftUI 包中是否有内置方式来增强表格上的“滑动关闭”手势。

我在这里遇到过这个问题:Prevent dismissal of modal view controller in SwiftUI --- 不起作用(至少不再起作用)并且 Xcode 不建议对投票答案中提供的代码进行修复/迁移。

也去过其他一些帖子,但他们要么指向上面的链接答案,要么建议第 3 方包。 (我试图避免这些,因为 SwiftUI 正在迅速发展,并且更好地坚持 Apple 目前官方提供的内容。)

总之,有没有办法---

    防止用户通过向下滑动关闭Sheet(不是FullScreenCover) 可选择显示提醒或执行任何其他操作,例如在您转到 Calendar.app 时,创建一个事件,输入几个字母并尝试将其关闭 ...全部不使用 3rd 方库?

谢谢。

【问题讨论】:

【参考方案1】:

这是一个用于阻止工作表关闭的原生 SwiftUI 方法的演示 - 只需提供带有拖动手势的背景。

使用 Xcode 12 / ios 14 测试

struct DemoSheetNoClose: View 
    @State private var showSheet = false
    var body: some View 
        Button("Show Sheet")  self.showSheet.toggle() 
            .sheet(isPresented: $showSheet) 
                ZStack 
                    Rectangle().fill(Color.red).border(Color.black) // << just demo
                        .edgesIgnoringSafeArea(.all)
                        .highPriorityGesture(DragGesture(minimumDistance: 0).onEnded  value in
                            // handle value here to, for example, show alert
                        )

                    Text("Content Here!")
                
            
    

注意:可以做成view wrapper、modifier等。

【讨论】:

感谢您提供的解决方法 — 并不完美,但确实不错!当用户在 iPad 上点击工作表之外时,仍然可能无法正常工作......

以上是关于SwiftUI:在用户滑动以关闭时显示警报的主要内容,如果未能解决你的问题,请参考以下文章

将 SwiftUI 警报或操作表绑定到值类型模型属性的可选性(当属性为 nil 时显示视图)的好方法是啥?

当表单中没有任何更改时显示警报框

推送到达时显示警报

SwiftUI:以编程方式关闭警报

如何通过 Javascript / jQuery 在按钮单击时显示引导警报?

使用 MVVM 在 SwiftUI 中显示警报