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


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:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。