UISearchBar在取消

时间:2015-11-10 10:19:28

标签: ios uitableview uisearchbar uisearchcontroller

我的应用是iPad风景,使用自动布局。

初始视图的表视图只占屏幕的一半(另一半是MapKit视图)。

包含该表(以及地图视图)的视图控制器是应用程序根导航控制器的顶视图控制器。

在视图加载时,我实例化UISearchController并将其搜索栏添加到表格视图的标题视图中,这是标准过程。

如果点击搜索栏并输入一些文字,则会显示结果。如果我在这里取消搜索,没问题。

如果相反,我选择其中一个结果行,然后进入下一个屏幕,然后弹回,搜索栏就消失了。我可以通过再次呼叫恢复它:

self.tableView.headerView = self.searchController.searchBar

在viewDidAppear()中,但这只有在我点按搜索栏“取消”之后才有效按钮(此时,它会再次消失 - 在示波器按钮折叠动画结束后立即)。

我见过很多类似的问题,但没有一个描述我的确切症状,没有解决方案(或者我能想到的任何其他问题):

// In viewDidLoad():

self.definesPresentationContext = true

self.searchController.definesPresentationContext = true

self.extendedLayoutIncludesOpaqueBars = true

self.navigationController?.extendedLayoutIncludesOpaqueBars = true

self.navigationController?.navigationBar.translucent = true

......似乎在我的情况下有用。

最奇怪的部分是,我有其他类似的表格视图与搜索界面(在模态视图控制器中显示),没有区别我可以发现配置,这些工作正常......

我知道我一定错过了什么......

2 个答案:

答案 0 :(得分:1)

我有类似的问题。有时,点按“取消”按钮时,搜索栏也会消失。我发现如果搜索栏再次重置为表头,这可能会导致搜索栏消失。因此,我有以下更新的代码来解决此问题。

func setupSearchController(_ ctr: UISearchController?)  {
  if let sc = car { // search bar is not nil
    if #available(iOS 11.0, *) {
      navigationItem.searchController = sc
    } else {
      // Fallback on earlier versions
      if tableView.tableHeaderView == nil {
        tableView.tableHeaderView = sc.searchBar
      }
    }
  } else {
    if #available(iOS 11.0, *) {
      navigationItem.searchController = nil
    } else {
      // Fallback on earlier versions
      tableView.tableHeaderView = nil
    }
  }
}

注意:对于iOS 11或更高版本,搜索栏设置为导航项。

答案 1 :(得分:0)

经过几个小时的尝试后,我发现了有问题的代码:

func searchBarTextDidEndEditing(searchBar: UISearchBar)
{
    // Dismiss the keyboard
    self.resultSearchController.resignFirstResponder()

    // Reload of table data
    self.resultSearchController.loadView()
}

在将这两行评论出来之后 - 或者更好,整个方法(因为我没有在其中做任何其他事情) - 问题自行解决。

注意:我的一个同事在尝试不同的事情时实现了这种方法,以使搜索按预期工作,并且它以某种方式卡住......

相关问题