按完成键后隐藏键盘 - Swift
Hiding keyboard after hitting the Done key - Swift
所以我正在以编程方式制作一个文本字段。当我按下键盘上的完成键时,光标会转到下一行并且键盘不会消失。我已经包含了人们推荐的所有代码行,以使键盘消失但它没有用。有人可以看看我的代码并建议我需要添加什么吗?我想按下完成键,键盘消失,光标不转到下一行。
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
}
}
关于您的评论,我相信您有关闭键盘的委托方法。
我看到的第一个问题是您的视图控制器没有实现文本视图的委托协议,更改它: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
委托方法在按下 return 键后关闭键盘
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
所以我正在以编程方式制作一个文本字段。当我按下键盘上的完成键时,光标会转到下一行并且键盘不会消失。我已经包含了人们推荐的所有代码行,以使键盘消失但它没有用。有人可以看看我的代码并建议我需要添加什么吗?我想按下完成键,键盘消失,光标不转到下一行。
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
}
}
关于您的评论,我相信您有关闭键盘的委托方法。
我看到的第一个问题是您的视图控制器没有实现文本视图的委托协议,更改它: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
委托方法在按下 return 键后关闭键盘
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}