當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Swift Optional 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大神的英文原創作品 Optional interactiveDismissDisabled(_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。