在SwiftUI视图中,键盘始终位于顶部

在SwiftUI视图中,键盘始终位于顶部,swiftui,keyboard,textfield,Swiftui,Keyboard,Textfield,我尝试在SwiftUI中开发一个测验应用程序。 为此,我希望键盘始终处于激活状态 现在的问题是,当我在键盘上点击回车键时,它消失了,我不得不再次点击文本字段 如何修改文本字段,使其在单击后不会消失,或者在此视图中键盘始终处于激活状态 我使用以下版本: Xcode:Version12.4(12D4e)/iOS版本:14.4 所需视图中的一些示例代码: struct Practice: View { @Binding var Alpha: Array<String> @

我尝试在SwiftUI中开发一个测验应用程序。 为此,我希望键盘始终处于激活状态

现在的问题是,当我在键盘上点击回车键时,它消失了,我不得不再次点击文本字段

如何修改文本字段,使其在单击后不会消失,或者在此视图中键盘始终处于激活状态

我使用以下版本:

Xcode:Version12.4(12D4e)/iOS版本:14.4

所需视图中的一些示例代码:

struct Practice: View {

    @Binding var Alpha: Array<String>
    @State private var inputdesc: String = "Answer"
    @State private var placeholder: String = ""
    @State var new = 0
    
var body: some View {


        
            ZStack {
                Color("Background").ignoresSafeArea()

VStack {
            Text(Alpha[new])
                .font(.system(size: 160))

            TextField(inputdesc, text: $placeholder, onCommit: {
    
                               new = Int.random(in: 0..<Alpha.count)
                               placeholder = ""

                            })
                    }
                .font(.system(size: 50))
                .autocapitalization(.none)
                .disableAutocorrection(true)
                .multilineTextAlignment(.center)
                .foregroundColor(Color("BackgroundInverse"))
                }
}
}
结构实践:视图{ @绑定变量Alpha:Array @国家私有变量inputdesc:String=“Answer” @状态专用变量占位符:String=“” @状态变量new=0 var body:一些观点{ ZStack{ 颜色(“背景”).ignoresSafeArea() VStack{ 文本(Alpha[新]) .font(.system(大小:160)) 文本字段(inputdesc,文本:$占位符,onCommit:{
new=Int.random(in:0..您需要使用UIKit委托

这是演示版本代码

struct NoneDismissTextField: ViewModifier {

    @ObservedObject var coordinator: Coordinator
    private var onCommit: ()->Void
    
    init(onCommit: @escaping ()->Void) {
        self.onCommit = onCommit
        coordinator = Coordinator(onCommit: onCommit)
    }
    
    public struct TextFieldView: UIViewRepresentable {
        
        var configure: (UITextField) -> Void
        
        public func makeUIView(context: UIViewRepresentableContext<TextFieldView>) -> UIView {
            let view = UIView(frame: .zero)
            DispatchQueue.main.async {
                if let textField = view.superview?.superview?.subviews[1].subviews[0] as? UITextField {
                    configure(textField)
                }
            }
            return view
        }
        
        public func updateUIView(_ uiView: UIView,
                                 context: UIViewRepresentableContext<TextFieldView>) {
            
        }
    }
    
    func body(content: Content) -> some View {

        return content
            .background(TextFieldView(configure: { (textField) in
                textField.delegate = self.coordinator
            }))
    }

    class Coordinator: NSObject, ObservableObject, UITextFieldDelegate {
        
        private var onCommit: () -> Void
         
        init(onCommit: @escaping ()->Void) {
            self.onCommit = onCommit
        }
        
        func textFieldShouldReturn(_ textField: UITextField) -> Bool {
            onCommit()
            return false
        }
    }
}
struct nonesmisstTextField:ViewModifier{
@观察对象变量协调器:协调器
私有var onCommit:()->Void
初始化(onCommit:@escaping()->Void){
self.onCommit=onCommit
协调员=协调员(onCommit:onCommit)
}
公共结构TextFieldView:UIViewRepresentable{
变量配置:(UITextField)->Void
公共函数makeUIView(上下文:UIViewRepresentableContext)->UIView{
let view=ui视图(帧:.0)
DispatchQueue.main.async{
如果let textField=view.superview?.superview?.subviews[1]。子视图[0]为?UITextField{
配置(文本字段)
}
}
返回视图
}
公共函数更新视图(uiView:uiView,
上下文:UIViewRepresentableContext){
}
}
func正文(内容:内容)->某些视图{
返回内容
.background(textfieldfiew)(配置:{(textField)在
textField.delegate=self.coordinator
}))
}
类协调器:NSObject、ObservableObject、UITextFieldDelegate{
私有var onCommit:()->Void
初始化(onCommit:@escaping()->Void){
self.onCommit=onCommit
}
func textField应该返回(textField:UITextField)->Bool{
onCommit()
返回错误
}
}
}
用法

TextField(inputdesc,text:$placeholder)
.修饰符(非DismissTextField)(onCommit:{

new=Int.random(在:0..

中)应用程序崩溃并出现以下错误:“由于未捕获的异常'NSRangeException'终止应用程序,原因:'***-[\uu NSArray0 objectAtIndex:::]:索引0超出空NSArray的界限'”您能提到您正在使用的代码版本和操作系统版本吗?Xcode:version 12.4(12D4e)/iOS版本:14.4它也会因以下代码而崩溃:`TextField(inputdesc,text:$placeholder).modifier(nonesmissttextfield(onCommit:{print(“Test”)}))`我在iOS 14.3中使用了XCode 12.3,效果很好。iOS 14.4中出现了一些变化。这里似乎出现了错误
view.superview?.superview?.subview[1]。subview[0]
您可以用这个来检查“查找文本字段”,也可以使用这个库来查找文本字段。谢谢您的帮助@Raja,但我无法让它正常工作。
TextField(inputdesc, text: $placeholder)
    .modifier(NoneDismissTextField(onCommit: {
        new = Int.random(in: 0..<Alpha.count)
        placeholder = ""
    }))