如何在UITableViewController中实现搜索栏?

时间:2017-07-13 12:28:52

标签: ios swift uitableview search

上下文:我正在Swift构建一个主要由UITableView组成的应用。每个单元由四个标签组成,每个标签的数据都来自核心数据。我已使用apple's tutorial作为tableview的基础,并this tutorial用于核心数据处理。我正在研究的最后一个功能是搜索,我正在努力。

问题:我遇到的问题是,大多数用于搜索tableviews的教程似乎都是围绕将搜索添加到作为UIViewController中的插座连接的tableview而构建的。我已经关注了苹果教程,所以我的tableview是在UITableViewController中设置的。我基本上坚持以下问题:如何在UITableViewController中实现一个搜索栏,根据主要标签(从核心数据中提取)过滤单元格?

1 个答案:

答案 0 :(得分:0)

使用UITableViewController比常规UIViewController有点棘手。我建议现在切换,而重构仍然很容易。如果要继续使用UITableViewController,则需要调整表视图的大小以在搜索栏的顶部腾出空间。

这篇文章讨论了调整表格视图的大小:How to resize UITableView in UITableViewController with section header

将表视图放开后,您可以创建一个新视图并将其添加到搜索栏的屏幕顶部。

private var searchBarWrapperView: UIView!

private var _searchController: UISearchController!

override func viewDidAppear(_ animated: Bool) {
    tableView.frame = CGRect(x: 0, y: 64, width: tableView.frame.width, height: tableView.frame.height - 64)

    _searchController = UISearchController(searchResultsController: nil)
    _searchController.dimsBackgroundDuringPresentation = false
    _searchController.searchBar.delegate = self
    _searchController.searchBar.sizeToFit()

    searchBarWrapperView = UIView(frame: CGRect(x: 0, y: 30, width: tableView.frame.width, height: 44))

    searchBarWrapperView.addSubview(_searchController.searchBar)

    tableView.superview!.addSubview(searchBarWrapperView)
}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    // filter the data for the search and then reload
    tableView.reloadData()
}