Swift 3.0 如何在搜索栏外单击时关闭搜索栏上的键盘



如标题中所述,我有兴趣在搜索栏外单击时从搜索栏中关闭键盘。类似的问题使用 self.view.endEdit(true( 在触摸开始了,但我没有运气。我不确定我是否遗漏了其他内容,或者我是否正确设置了搜索栏。

import UIKit
import MapKit
class AddressVC: UIViewController {
    @IBOutlet weak var searchBar: UISearchBar!
    var searchCompleter = MKLocalSearchCompleter()
    var searchResults = [MKLocalSearchCompletion]()


    @IBOutlet weak var searchResultsTableView: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
        searchBar.delegate = self
    // Do any additional setup after loading the view, typically from a nib.
        searchResultsTableView.isHidden = true
        searchCompleter.delegate = self
    }


extension AddressVC: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    searchCompleter.queryFragment = searchText
}
func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
    self.searchBar.endEditing(true)
    searchBar.resignFirstResponder()
    return true
}
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
    searchResultsTableView.isHidden = false
    return true
}
func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.view.endEditing(true)
    self.searchBar.endEditing(true)
    searchBar.resignFirstResponder()
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
    searchResultsTableView.isHidden = true
    self.searchBar.endEditing(true)
    searchBar.resignFirstResponder()
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    searchBar.resignFirstResponder()
}

}
override func viewDidLoad() {
    super.viewDidLoad()
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(AddressVC.dismissKeyboard))
    //Uncomment the line below if you want the tap not not interfere and cancel other interactions.
    //tap.cancelsTouchesInView = false
    view.addGestureRecognizer(tap)
}
func dismissKeyboard() {
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    view.endEditing(true)
}

最新更新