在ios開發中,為了方便,我們經常使用UITableViewcontroller,比如搜索界面為了方便可能更多的使用UITableViewcontroller,那么問題就來了,當我點擊搜索框的時候會彈出一個鍵盤,我們需要點擊空白處就隱藏鍵盤,這時候大家可能想到的事在UITableViewcontroller中重寫touchesBegan方法,但是發現這個方法並沒有響應,我猜想可能是被屏蔽了,那我們該怎么做呢?下面我說一下實現思路:
1.自定義一個類繼承UITableView然后重新touchesBegan然后寫一個代理提供一個隱藏鍵盤的方法,代碼如下:
import UIKit
//搜索時點擊空白處隱藏鍵盤
protocol SearchTableViewDelegate {
func hideKeyBoard()
}
class SearchTableView: UITableView {
var mDelegate:SearchTableViewDelegate!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if mDelegate != nil{
mDelegate.hideKeyBoard()
}
}
}
2.調用
(注意:在調用之前一定要將UITableViewController中的UITableView設置成自己定義的那個UITableView否則不會有效果切記)
import UIKit
//搜索
class SearchTableViewController: UITableViewController,SearchTableViewDelegate{
@IBOutlet var mSearchTableView: SearchTableView!
var searchBar:UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
mSearchTableView.mDelegate=self
addSearchBar()
}
//在導航欄添加搜索框
func addSearchBar() {
self.searchBar = UISearchBar(frame:CGRect(x:0,y:0,width:self.view.bounds.width,height:44))
self.navigationItem.titleView=searchBar
}
//點擊屏幕空白處退出鍵盤
func hideKeyBoard() {
self.searchBar.resignFirstResponder()
}
}
