"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()
    }
}

希望这能解决您的问题!