"out of view" SwiftUI 时,TextField 的 .focused 修饰符不起作用
TextField's .focused modifier not working when "out of view" SwiftUI
我正在使用 List
底部带有 TextEditor
的 SwiftUI List
。当按下按钮时,TextEditor
变为活动状态或“聚焦”。
为此,我在 TextEditor
中添加了一个 .focused
修饰符。当 List
滚动到底部并且 TextEditor
可见时,这按预期工作并在按下按钮时显示键盘。
但问题是,当 List
滚动到顶部并且 TextEditor
在屏幕上不可见时,TextField
似乎没有获得焦点。
import SwiftUI
struct ContentView: View {
var array = Array(0...20)
@State private var newItemText : String = ""
@FocusState var focused: Bool
var body: some View {
VStack{
List{
ForEach(array, id: \.self) {
Text("\([=11=])")
}
TextEditor(text: $newItemText)
.focused($focused)
}
Button {
focused = true
} label: {
Text("Add Item")
}
}
}
}
您必须在 DispatchQueue 中设置该字段。
import SwiftUI
struct ContentView: View {
var array = Array(0...20)
@State private var newItemText : String = ""
@FocusState var focusedField: Bool
var body: some View {
VStack {
ScrollViewReader { scrollView in
List {
ForEach(array, id: \.self) {
Text("\([=10=])")
}
TextField("", text: self.$newItemText)
.id("TextEditor")
.focused($focusedField)
}
Button(action: {
scrollView.scrollTo("TextEditor")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.focusedField = true
}
}) {
Text("Add Item")
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
希望这能解决您的问题!
我正在使用 List
底部带有 TextEditor
的 SwiftUI List
。当按下按钮时,TextEditor
变为活动状态或“聚焦”。
为此,我在 TextEditor
中添加了一个 .focused
修饰符。当 List
滚动到底部并且 TextEditor
可见时,这按预期工作并在按下按钮时显示键盘。
但问题是,当 List
滚动到顶部并且 TextEditor
在屏幕上不可见时,TextField
似乎没有获得焦点。
import SwiftUI
struct ContentView: View {
var array = Array(0...20)
@State private var newItemText : String = ""
@FocusState var focused: Bool
var body: some View {
VStack{
List{
ForEach(array, id: \.self) {
Text("\([=11=])")
}
TextEditor(text: $newItemText)
.focused($focused)
}
Button {
focused = true
} label: {
Text("Add Item")
}
}
}
}
您必须在 DispatchQueue 中设置该字段。
import SwiftUI
struct ContentView: View {
var array = Array(0...20)
@State private var newItemText : String = ""
@FocusState var focusedField: Bool
var body: some View {
VStack {
ScrollViewReader { scrollView in
List {
ForEach(array, id: \.self) {
Text("\([=10=])")
}
TextField("", text: self.$newItemText)
.id("TextEditor")
.focused($focusedField)
}
Button(action: {
scrollView.scrollTo("TextEditor")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.focusedField = true
}
}) {
Text("Add Item")
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
希望这能解决您的问题!