2015-02-24 49 views
0

我在TableViewController的標題中添加了一個簡單的搜索欄並實現了委託。一切正常。在TableViewController的SearchBar中取消按鈕需要雙擊

奇怪的是,取消只在第二次敲擊後才被調用。

編輯:https://www.youtube.com/watch?v=ehnA2kmGqcQ&feature=youtu.be

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
      if section == 0 { 
       searchBar = UISearchBar(frame: CGRectMake(0, 0, tableView.frame.size.width, 0)) 
       searchBar.barTintColor = kbackgroundColor 
       searchBar.showsCancelButton = true 
       searchBar.showsSearchResultsButton = false 
       searchBar.tintColor = UIColor.whiteColor() 
       searchBar.delegate = self 
       return searchBar 
      } 
      return nil 
     } 


     func searchBarCancelButtonClicked(searchBar: UISearchBar) { 
      searchInProgress = false 
      loadObjects() 
      searchBar.resignFirstResponder() 
     } 
+0

「取消只在第二次點擊後被調用」你怎麼知道這個?將記錄放在「if section」和「cancelButtonClicked」中,以確保它們是否在你期望的時候被調用。 – matt 2015-02-24 16:05:11

+0

@matt我會做一個短視頻並把日誌。我認爲它是一個錯誤。如果我鏈接了視頻,你會觀看它嗎? – ericgu 2015-02-24 16:12:50

回答

0

我相信這個問題:取消按鈕只會火當它是重點

UISearchBar cancel button not responding

+0

但這不應該成爲一個問題。除非搜索字段中有文字,否則爲什麼要點擊取消?如果搜索字段中有文本,即您正在輸入,則_does_有焦點。這聽起來像你正在使用Cancel按鈕以某種方式錯誤。 – matt 2015-02-24 16:28:17

+0

我可以問你最近想做什麼嗎?如果您嘗試過濾表格視圖,則不應將手動將搜索字段放入第一個標題部分;你應該把UISearchController的搜索字段放到表頭中。 – matt 2015-02-24 16:30:03

+0

這個可下載示例項目說明如何使用搜索字段來過濾同桌:https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/bk2ch08p438searchableTable3 – matt 2015-02-24 16:32:09

1

的問題是,你是濫用取消按鈕。在您的視頻中,這是您的操作:

  1. 您選擇搜索字段中的所有文本。

  2. 您刪除搜索字段中的所有文本。

  3. 過濾未停止,因此您點擊取消。

  4. 沒有任何反應,所以你再次點擊取消。

但是第3步開始時是錯誤的。當搜索字段中的所有文本都被刪除時,過濾應該已停止。您應該使用搜索欄代理方法檢測到這種情況並作出相應的響應。

正如我在其他意見中提到,UISearchController可以在這裏一個巨大的幫助。這種情況 - 過濾表格視圖 - 正是它的目的。這將有助於正確管理搜索欄的行爲。