0

我正在使用 SwiftUIList底部TextEditorList. TextEditor按下按钮时,它变为活动或“聚焦” 。

在此处输入图像描述

为了实现这一点,我.focusedTextEditor. 当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("\($0)")
                     }
                     
                    TextEditor(text: $newItemText)
                        .focused($focused)
                        
                }
                Button {
                    focused = true
                } label: {
                    Text("Add Item")
                }
                
            }
    }
}

4

1 回答 1

0

您必须在 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("\($0)")
                    }
                    
                    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()
    }
}

希望这能解决您的问题!

于 2021-11-25T10:13:08.410 回答