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


Swift Never focused(_:equals:)用法及代碼示例


實例方法

focused(_:equals:)

通過將其焦點狀態綁定到給定的狀態值來修改此視圖。

聲明

func focused<Value>(
    _ binding: FocusState<Value>.Binding,
    equals value: Value
) -> some View where Value : Hashable

返回值

修改後的視圖。

參數

binding

要注冊的狀態綁定。當焦點移動到修改後的視圖時,綁定將綁定值設置為相應的匹配值。如果調用者以編程方式將狀態值設置為匹配值,則焦點將移至修改後的視圖。當焦點離開修改後的視圖時,綁定將綁定值設置為 nil 。如果調用者將該值設置為 nil ,則 SwiftUI 會自動解除焦點。

value

確定綁定是否應更改時要匹配的值。

詳述

每當 binding 等於 value 時,使用此修飾符使視圖獲得焦點。通常,您創建一個可以接收焦點的字段枚舉,綁定此枚舉的一個實例,並將其案例分配給可聚焦視圖。

下麵的示例使用 LoginForm 枚舉的情況來綁定兩個 TextField 視圖的焦點狀態。登錄按鈕驗證字段並將綁定的focusedField 值設置為需要用戶更正問題的任何字段。


struct LoginForm {
    enum Field: Hashable {
        case usernameField
        case passwordField
    }


    @State private var username = ""
    @State private var password = ""
    @FocusState private var focusedField: Field?


    var body: some View {
        Form {
            TextField("Username", text: $username)
                .focused($focusedField, equals: .usernameField)


            SecureField("Password", text: $password)
                .focused($focusedField, equals: .passwordField)


            Button("Sign In") {
                if username.isEmpty {
                    focusedField = .usernameField
                } else if password.isEmpty {
                    focusedField = .passwordField
                } else {
                    handleLogin(username, password)
                }
            }
        }
    }
}

要使用布爾值控製焦點,請改用View/focused(_:) 方法。

可用版本

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

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Never focused(_:equals:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。