Contents

focused(_:)

Modifies this view by binding its focus state to the given Boolean state value.

Declaration

nonisolated func focused(_ condition: FocusState<Bool>.Binding) -> some View

Parameters

  • condition:

    The focus state to bind. When focus moves to the view, the binding sets the bound value to true. If a caller sets the value to true programmatically, then focus moves to the modified view. When focus leaves the modified view, the binding sets the value to false. If a caller sets the value to false, SwiftUI automatically dismisses focus.

Return Value

The modified view.

Discussion

Use this modifier to cause the view to receive focus whenever the condition value is true. You can use this modifier to observe the focus state of a single view, or programmatically set and remove focus from the view.

In the following example, a single TextField accepts a user’s desired username. The text field binds its focus state to the Boolean value usernameFieldIsFocused. A “Submit” button’s action verifies whether the name is available. If the name is unavailable, the button sets usernameFieldIsFocused to true, which causes focus to return to the text field, so the user can enter a different name.

@State private var username: String = ""
@FocusState private var usernameFieldIsFocused: Bool
@State private var showUsernameTaken = false

var body: some View {
    VStack {
        TextField("Choose a username.", text: $username)
            .focused($usernameFieldIsFocused)
        if showUsernameTaken {
            Text("That username is taken. Please choose another.")
        }
        Button("Submit") {
            showUsernameTaken = false
            if !isUserNameAvailable(username: username) {
                usernameFieldIsFocused = true
                showUsernameTaken = true
            }
        }
    }
}

To control focus by matching a value, use the focused(_:equals:) method instead.

See Also

Managing focus state