你不想做
self.view
第一反应者。你想做
searchBar
第一反应者。
没有理由打电话来
resignFirstResponder
如果你要打电话
becomeFirstResponder
在另一个视图上。
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()
}
}
也,
搜索条
不是一个
UITextField
.
不需要
viewTapped
成为一种财产。使其成为局部变量。
不需要
isKeyboardShowing
属性。