所以我正在以编程方式创建文本字段。当我按键盘上的完成键时,光标会转到下一行,并且键盘不会消失。我已经包含了人们推荐使用的所有代码行,以使键盘消失,但无法正常工作。有人可以查看我的代码并为我提供我需要添加的建议吗?我想按一下已完成的键,键盘消失,光标也不会转到下一行。
import UIKit
class FirstPage: UIViewController {
let emailText: UITextView = {
let textView = UITextView()
let attributedText = NSMutableAttributedString(string: "Email", attributes: [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 20),NSAttributedString.Key.foregroundColor: UIColor.gray])
textView.backgroundColor = UIColor.clear
textView.attributedText = attributedText
textView.translatesAutoresizingMaskIntoConstraints = false
textView.textAlignment = .center
textView.returnKeyType = .done
textView.resignFirstResponder()
textView.isScrollEnabled = false
return textView
}()
override func viewDidLoad() {
super.viewDidLoad()
emailText.delegate = self as? UITextViewDelegate
view.addSubview(emailText)
emailText.translatesAutoresizingMaskIntoConstraints = false
emailText.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
}
}
答案 0 :(得分:0)
关于您的评论,我相信您有消除键盘的委托方法。
我看到的第一个问题是您的视图控制器未实现文本视图的委托协议,请对其进行更改:Class: Protocol
extension FirstPage: UITextViewDelegate {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.resignFirstResponder()
return false
}
return true
}
}
然后将文本视图的委托设置为self
emailText.delegate = self
还使文本视图变量lazy
(也可以在惰性变量初始化中分配其委托)
lazy var emailText: UITextView = {
let textView = UITextView()
...
textView.delegate = self
return textView
}()
现在,让我们考虑一下内容。您有UITextView
用于插入电子邮件。由于插入电子邮件仅需一行文本,因此请使用UITextField
代替文本视图。
然后,您可以在按下返回键
后使用文本字段的textFieldShouldReturn
委托方法关闭键盘
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}