UISearchController
是 iOS 开发中用于实现搜索功能的控件,它通常与 UISearchBar
和 UITableViewController
结合使用。UISearchBar
用于输入搜索关键词,UITableViewController
用于显示搜索结果。
当 UISearchBar
为空时,UISearchController
结果 TableViewController
不会清除结果。
这个问题通常是因为 UISearchController
的 active
属性没有正确处理,或者 UISearchResultsUpdating
协议的方法没有正确实现。
UISearchController
的 active
属性正确处理:
当 UISearchBar
的文本为空时,应该将 UISearchController
的 active
属性设置为 false
,以清除搜索结果。UISearchResultsUpdating
协议的方法:
确保在 updateSearchResults(for:)
方法中正确处理搜索结果的更新。import UIKit
class ViewController: UIViewController, UISearchResultsUpdating {
var searchController: UISearchController!
override func viewDidLoad() {
super.viewDidLoad()
let resultsTableViewController = UITableViewController(style: .plain)
resultsTableViewController.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
searchController = UISearchController(searchResultsController: resultsTableViewController)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search items"
navigationItem.searchController = searchController
definesPresentationContext = true
}
// MARK: - UISearchResultsUpdating
func updateSearchResults(for searchController: UISearchController) {
let searchBar = searchController.searchBar
let tableView = searchController.searchResultsController?.tableView
if searchBar.text?.isEmpty == true {
tableView?.reloadData()
} else {
// Perform your search here and update the table view
// For example:
let searchResults = performSearch(with: searchBar.text ?? "")
(searchController.searchResultsController as? UITableViewController)?.tableView.reloadData()
}
}
func performSearch(with searchText: String) -> [String] {
// Implement your search logic here
return []
}
}
通过上述方法,可以确保当 UISearchBar
为空时,UISearchController
结果 TableViewController
能够正确清除搜索结果。
领取专属 10元无门槛券
手把手带您无忧上云