2016-06-08 96 views
0

所以我有一個基本上是使用UITableViewController和UISearchController顯示的電影搜索應用程序。當選擇了uitableview單元並使用UISearchController時關閉鍵盤

我有一個單元,當點擊時加載更多的結果。但是當我點擊它時,我也想讓鍵盤消失。因此在tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)方法中,我假設我必須致電resignFirstResponder()。問題是它不起作用。我嘗試了一切,但沒有任何東西讓鍵盤消失。我想這是因爲鍵盤是UISearchBar的一部分,我應該撥打searchBar.resignFirstResponder()。問題是我無法從我的UITableViewController類訪問searchBar。

這裏是我有什麼,沒有這個工程:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     //Remove Keyboard 
      self.resignFirstResponder() 
      self.view.resignFirstResponder() 
      self.view.endEditing(true) 
      self.tableView.endEditing(true) 
      self.navigationController?.view.endEditing(true) 
      self.navigationController?.resignFirstResponder() 

     //Do a bunch of other stuff.. 
} 

回答

1

如果您知道searchBar是第一個響應,那麼:

  1. 傳遞給UITableViewControllersearchBar參考
  2. 使用KVC:發佈通知,表明您正在加載更多結果,並且應該隱藏鍵盤,並在您的UISeachController中偵聽該通知。
+0

我試圖避免這種情況。這樣做效率不高嗎?它的工作,雖然。謝謝! – QuantumHoneybees

+0

爲什麼它效率低下?授權是最好的解決方案,但是如果你不想傳遞引用,你也可以使用通知。 – Armin

+0

當我設置一個'tableview'的「searchBar」變量爲'SearchController.SearchBar'時,我通過引用分配權利?如果是這樣,那麼這將是最有效和最無干擾的方式。 – QuantumHoneybees

0
[[UIApplication sharedApplication]sendAction:@selector(resignFirstResponder) 
               to:nil 
               from:nil 
              forEvent:nil];