2015-12-23 54 views
0

我有一個UITextField的視圖,它在它下面的UITableView上執行一些搜索操作。點擊手勢用TableView關閉UITextField

問題是,當我設置輕擊手勢來解除UITextField之外的觸摸鍵盤時,它似乎取消了我的TableView單元格的didSelect方法。

這裏是我目前使用在viewDidLoad中的代碼:即觸及的UITextField之外取消鍵盤

let tapRecognizer = UITapGestureRecognizer(target: self, action: "handleSingleTap:") 
    tapRecognizer.numberOfTapsRequired = 1 
    self.view.addGestureRecognizer(tapRecognizer) 

    func handleSingleTap(recognizer: UITapGestureRecognizer) { 

    self.view.endEditing(true) 

    } 

如何設置這件事是這樣,但還是讓我選擇的TableView細胞?

+0

出於好奇;你爲什麼不在你的表視圖中使用'UISearchController'? –

回答

0

您需要實現手勢識別器委託。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,shouldReceiveTouch touch: UITouch) -> Bool 
{ 
    if ([touch.view isDescendantOfView:yourTableView]) { 
     return false 
    } 
    return true 
} 

這樣,它不會干擾您的表視圖上的觸摸,仍然允許您選擇表視圖。

0

不鼓勵使用輕拍手勢這麼多。當它覆蓋我的自定義按鈕時,我遇到了一個問題。我用XCDFormInputAccessoryView爲iOS解決了這個問題。它對我來說很好。

0

設置cancelsTouchesInView屬性UITapGestureRecognizer爲true。

let tapGesture = UITapGestureRecognizer(target: self, action: Selector("hideKeyboard")) 
tapGesture.cancelsTouchesInView = true 
tableView.addGestureRecognizer(tapGesture) 
+0

我實際上通過做相反的事情來獲得這個工作,將cancelsTouchesInView設置爲false –

1

無需添加任何手勢關閉鍵盤上的tableview,iOS版SDK本身提供一個屬性來關閉鍵盤稱爲keyboardDismissMode。我們可以從IB本身獲得這個屬性,查看下面的圖片供您參考。

enter image description here