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

问题描述:

正如标题中所述,我有兴趣在点击搜索栏之外时从搜索栏中取消键盘。类似的问题表明使用self.view.endEndEditing(true)在touchesBegan中,但我没有运气。我不知道我是否缺少其他任何东西,或者如果我已经正确设置了我的searchBar。Swift 3.0如何在点击栏外点击时关闭搜索栏上的键盘

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) 
} 
+0

上述解决方案没有为在navigationController一个搜索栏工作。我将view.endEditing(true)更改为self.searchBar.endEditing(true)并且工作正常。 – DoesData