在同一个viewController中同时搜索和过滤tableViewCells,可以通过以下步骤实现:
以下是一个示例代码:
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
var data = ["Apple", "Banana", "Orange", "Grape", "Watermelon"]
var filteredData = [String]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
searchBar.delegate = self
}
// MARK: - UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = filteredData[indexPath.row]
return cell
}
// MARK: - UISearchBarDelegate
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filterData(with: searchText)
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchBar.text = ""
filterData(with: "")
searchBar.resignFirstResponder()
}
// MARK: - Helper Methods
func filterData(with searchText: String) {
if searchText.isEmpty {
filteredData = data
} else {
filteredData = data.filter { $0.lowercased().contains(searchText.lowercased()) }
}
tableView.reloadData()
}
}
这个示例代码中,我们使用了一个名为data
的数组来存储tableView的数据源,filteredData
数组用于存储过滤后的数据。在搜索栏的文本变化方法中,我们调用了filterData
方法来进行过滤,并更新tableView的数据源为过滤后的数组。最后调用reloadData
方法刷新tableView的界面。
推荐的腾讯云相关产品:腾讯云移动开发平台(https://cloud.tencent.com/product/mmp)
请注意,以上答案仅供参考,具体实现方式可能因实际需求和开发环境而有所不同。
领取专属 10元无门槛券
手把手带您无忧上云