簡體   English   中英

MacOS:有條件呈現的 TextField 的默認焦點

[英]MacOS: Default focus for conditionally rendered TextField

更新 1:

  • 我嘗試在TextFieldonAppear回調中調用resetFocus ,它也沒有用。
  • 如果TextField與初始應用程序渲染一起渲染,即使沒有修改prefersDefaultFocus ,它也會自動聚焦。 所以也許prefersDefaultFocus根本不適用於TextField

原帖:

我正在按照Apple 的指南進行操作 在我們單擊按鈕並呈現 TextField 之后,我希望它自動聚焦,但它沒有。

如果isEditing的初始值為true ,即TextField與初始應用程序渲染一起渲染,它會自動聚焦。

import SwiftUI

struct ContentView: View {
    @Namespace private var namespace
    @State private var isEditing: Bool = false
    @State private var textInput: String = ""

    var body: some View {
        VStack {
            Button("Toggle editing") { isEditing = !isEditing }
            if isEditing {
                TextField("Write something", text: $textInput)
                    .prefersDefaultFocus(in: namespace)
            }
        }
    }
}

我嘗試通過以下兩種方式調用resetFocus ,但都沒有幫助。

    // ...

    @Environment(\.resetFocus) var resetFocus

    // ...

    @State private var isEditing: Bool = false {
        didSet {
            resetFocus(in: namespace)
        }
    }

    // ...
    // ...

        @Environment(\.resetFocus) var resetFocus

    // ...

            if isEditing {
                TextField("Write something", text: $textInput)
                    .prefersDefaultFocus(in: namespace)
                    .background(textFieldDefaultFocusSetter)
            }

    // ...

    var textFieldDefaultFocusSetter: some View {
        resetFocus(in: namespace)
        return EmptyView()
    }

我錯過了什么? 例如, prefersDefaultFocus僅針對在應用程序初始呈現期間呈現的視圖進行評估?

我不知道prefersDefaultFocus是否適用於條件視圖,但在您的情況下,只需明確設置即可。 添加:

 @FocusState private var focus: Bool 

和:

VStack {
        Button("Toggle editing") {
            isEditing = !isEditing
            focus = true
        }
        if isEditing {
            TextField("Write something", text: $textInput)
                .focused($focus)
//                    .prefersDefaultFocus(in: namespace)
        }
    }
}

這將在您的TextField出現時立即將焦點設置到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM