2017-05-24 34 views
1

正如標題中所述,我有興趣在點擊搜索欄之外時從搜索欄中取消鍵盤。類似的問題表明使用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() 
} 


} 

回答

2
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

相關問題