如何使键盘在点击视图时显示并开始编辑文本字段



我试图使它使当用户触摸UIView时,键盘出现,用户可以在textField中键入。我无法使视图成为第一响应者,我怎样才能做到这一点?

下面是代码:

import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var searchBar: UITextField!
var isKeyboardShowing:Bool = true
var viewTapped:UITapGestureRecognizer = UITapGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
searchBar.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -500).isActive = true
viewTapped = UITapGestureRecognizer(target: self, action: #selector(viewWasTapped))
self.view.addGestureRecognizer(viewTapped)

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
searchBar.delegate = self
}
override func viewWillAppear(_ animated: Bool) {
self.searchBar.resignFirstResponder()
self.view.becomeFirstResponder()
print("Can the view be the first responder: (self.view.canBecomeFirstResponder)")
print("the searchbar is the first responder: (searchBar.isFirstResponder)")
print("the view is the first responder: (self.view.isFirstResponder)")
}
@objc func viewWasTapped(){
print("The view was tapped")
if isKeyboardShowing{
view.endEditing(true)
}
else{
}
}
@objc func keyboardWillShow(notification: NSNotification) {
print("keyboardWillShow")
}
@objc func keyboardWillHide(notification: NSNotification){
print("keyboardWillHide")
}
}

你不想让self.view成为第一响应者。您希望searchBar成为第一响应者。

如果您要在一个视图上调用becomeFirstResponder,则没有理由在一个视图上调用resignFirstResponder

class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var searchBar: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
searchBar.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -500).isActive = true
searchBar.delegate = self
let viewTapped = UITapGestureRecognizer(target: self, action: #selector(viewWasTapped))
self.view.addGestureRecognizer(viewTapped)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
override func viewWillAppear(_ animated: Bool) {
searchBar.becomeFirstResponder()
print("Can the view be the first responder: (self.view.canBecomeFirstResponder)")
print("the searchbar is the first responder: (searchBar.isFirstResponder)")
print("the view is the first responder: (self.view.isFirstResponder)")
}
@objc func viewWasTapped(){
print("The view was tapped")
if searchBar.isFirstResponder {
searchBar.resignFirstResponder()
} else{
searchBar.becomeFirstResponder()
}
}

此外,searchBar不是UITextField的最佳名称。

无需viewTapped成为财产。使其成为局部变量。

不需要isKeyboardShowing属性。

最新更新