2015-02-24 68 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可以在这里一个巨大的帮助。这种情况 - 过滤表格视图 - 正是它的目的。这将有助于正确管理搜索栏的行为。