2017-05-24 12 views
1

タイトルに記載されているとおり、検索バーの外側をクリックすると、検索バーからキーボードを外すことになります。同様の質問は、touchesBeganでself.view.endEditing(true)を使用すると述べましたが、私は運がなかった。私は何かが不足しているかどうか、または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

関連する問題