[英]MacOS: Default focus for conditionally rendered TextField
更新 1:
TextField
的onAppear
回調中調用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.