搜索栏始终可见

时间:2016-01-11 13:57:37

标签: swift xcode7 uisearchbar

您好我希望searchBar始终可见,这就是我所拥有的:

searchController = UISearchController(searchResultsController: nil)
tableView.tableHeaderView = searchController.searchBar
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false

有没有办法实现这个目标?

提前致谢

5 个答案:

答案 0 :(得分:14)

怎么样?     
override func viewDidAppear(_ animated: Bool) {
   super.viewDidAppear(animated)
   searchController.searchBar.becomeFirstResponder()
}

看看Apple的示例(源代码):https://developer.apple.com/library/content/samplecode/TableSearch_UISearchController/Introduction/Intro.html

注意 - 从iOS 11开始,你应该使用UINavigationController而不是表头视图:

        if #available(iOS 11.0, *) {
          // For iOS 11 and later, we place the search bar in the navigation bar.
          navigationController?.navigationBar.prefersLargeTitles = true
          navigationItem.searchController = searchController
          // We want the search bar visible all the time.
          navigationItem.hidesSearchBarWhenScrolling = false
      } else {
          // For iOS 10 and earlier, we place the search bar in the table view's header.
          tableView.tableHeaderView = searchController.searchBar
      }

答案 1 :(得分:3)

您可以尝试将其放在第一部分的标题中,如下所示:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { return self.searchController.searchBar }

我必须解决一个非常相似的情况,这就是我最终的结果:

    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.delegate = self
    searchController.searchBar.sizeToFit()
    searchController.searchBar.tintColor = CARBONCOLOR
    searchController.hidesNavigationBarDuringPresentation = false
    self.definesPresentationContext = true

    let search = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "presentSearch")
    self.navigationItem.setRightBarButtonItem(search, animated: true)

使用此代码显示searchController

func presentSearch()
{
    self.navigationController!.presentViewController(searchController, animated: true, completion: nil)
}

这会在导航栏中放置一个barbutton,它会在导航栏上显示searchController。这不是我想要的,但结果是从tableview中的任何一点允许搜索的最简单方法。它还节省了一点空间,这是更好的。如果您没有导航栏,则可以自己出示。

答案 2 :(得分:1)

在viewDidLoad中,您可以在其中设置SearchController:

navigationItem.hidesSearchBarWhenScrolling = false

答案 3 :(得分:0)

UISearchController类应该在不使用时隐藏(即,当没有执行搜索时),因此我建议以其设计的方式使用它或以其他方式使用它。

在您的情况下,实施UISearchBar可能更合适,例如将其配置为(现有)UINavigationBar中的项目。这样,搜索栏将始终可见。

您是否已经拥有一个视图控制器,它在视图层次结构中包含导航栏?如果是这样,请尝试将搜索栏设置为项目,并使用UISearchController模式以其他方式实现搜索结果的显示。

答案 4 :(得分:0)

您在searchBar的{​​{1}}中设置tableHeaderView,默认行为是UITableView滚动searchBar,我担心你不能像你那样改变它。

但是你可以改变你的方式,你可以使用UITableView并自己管理视图并将它放在层次结构视图中的UISearchDisplayController之上,这两个教程可以帮到你很多关于如何实现它并理解它是如何工作的:

我希望这对你有所帮助。