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

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

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

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

总之,有没有办法---

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

谢谢。

【问题讨论】:

    标签: ios swift swiftui


    【解决方案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 上点击工作表之外时,仍然可能无法正常工作......
    猜你喜欢
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2020-11-05
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多