繁体   English   中英

SwiftUI 显示和关闭文本字段键盘

[英]SwiftUI Show and Dismiss Textfield Keyboard

我尝试在视图出现后立即显示文本字段键盘,并在点击键盘“返回”键时关闭键盘,问题的第一部分由下面的代码示例解决,但这会使键盘“返回”键不起作用,是否有人可以帮助我根据需要显示和关闭文本文件键盘。

import SwiftUI

struct MyTextField: UIViewRepresentable {
    typealias UIViewType = UITextField
    
    @Binding var becomeFirstResponder: Bool
    
    func makeUIView(context: Context) -> UITextField {
        let textField = UITextField()
        return textField
    }
    
    func updateUIView(_ textField: UITextField, context: Context) {
        if self.becomeFirstResponder {
            DispatchQueue.main.async {
                textField.becomeFirstResponder()
                self.becomeFirstResponder = false
            }
        }
    }
}

struct TextFieldFirstResponder: View {
    
    @State private var becomeFirstResponder = false
    
    var body: some View {
        
        MyTextField(becomeFirstResponder: self.$becomeFirstResponder)
            .onAppear {
                self.becomeFirstResponder = true
            }
    }
}

使用textFieldShouldReturn委托方法。 为此制作 UIViewRepresentable 的协调器。

struct MyTextField: UIViewRepresentable {
    typealias UIViewType = UITextField
    
    @Binding var becomeFirstResponder: Bool
    
    func makeUIView(context: Context) -> UITextField {
        let textField = UITextField()
        textField.delegate = context.coordinator
        return textField
    }
    
    func updateUIView(_ textField: UITextField, context: Context) {
        if self.becomeFirstResponder {
            DispatchQueue.main.async {
                textField.becomeFirstResponder()
                self.becomeFirstResponder = false
            }
        }
    }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(parent: self)
    }

    class Coordinator: NSObject, UITextFieldDelegate {
        var parent: MyTextField
        
        init(parent: MyTextField) {
            self.parent = parent
        }
        
        func textFieldShouldReturn(_ textField: UITextField) -> Bool {
            textField.resignFirstResponder()
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM