当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Never interactiveDismissDisabled(_:)用法及代码示例


实例方法

interactiveDismissDisabled(_:)

有条件地阻止弹出框或工作表的交互解除。

声明

func interactiveDismissDisabled(_ isDisabled: Bool = true) -> some View

参数

isDisabled

一个布尔值,指示在工作表或弹出窗口中显示时是否防止包含视图层次结构的非编程解除。

详述

用户可以使用内置手势关闭某些类型的演示文稿。特别是,用户可以通过向下拖动工作表来关闭工作表,或者通过在呈现的视图之外单击或轻敲来关闭工作表。使用interactiveDismissDisabled(_:) 修饰符有条件地防止这种解雇。您通常这样做是为了防止用户在提供所需数据或完成所需操作之前关闭演示文稿。

例如,假设您有一个视图显示用户在继续之前必须确认的许可协议:


struct TermsOfService: View {
    @Binding var areTermsAccepted: Bool
    @Environment(\.dismiss) private var dismiss


    var body: some View {
        Form {
            Text("License Agreement")
                .font(.title)
            Text("Terms and conditions go here.")
            Button("Accept") {
                areTermsAccepted = true
                dismiss()
            }
        }
    }
}

如果您在工作表中显示此视图,用户可以通过点击按钮(从其 action 闭包中调用 EnvironmentValues/dismiss)或向下拖动工作表来关闭它。为确保用户通过点击按钮接受条款,禁用交互式解雇,以areTermsAccepted 属性为条件:


struct ContentView: View {
    @State private var isSheetPresented = false
    @State private var areTermsAccepted = false


    var body: some View {
        Button("Use Service") {
            isSheetPresented = true
        }
        .sheet(isPresented: $isSheetPresented) {
            TermsOfService()
                .interactiveDismissDisabled(!areTermsAccepted)
        }
    }
}

您可以将修改器应用于工作表视图层次结构中的任何视图,包括工作表的顶级视图,如示例所示,或任何子视图,如 Form 或 Accept Button

修饰符对编程解除没有影响,您可以通过更新控制表示的 Binding 或调用环境的 EnvironmentValues/dismiss 操作来调用它。在 macOS 上,禁用弹出框中的交互式解除会使弹出框非瞬态。

可用版本

iOS 15.0+, iPadOS 15.0+, macOS 12.0+, Mac Catalyst 15.0+, tvOS 15.0+, watchOS 8.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Never interactiveDismissDisabled(_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。