问题描述: 由于cellForRowAt仍在调用原始的未筛选数组,因此xCode TableView搜索结果无法正确显示。
解决方案: 在xCode中,当使用TableView进行搜索时,需要注意cellForRowAt方法仍然会调用原始的未筛选数组,导致搜索结果无法正确显示。为了解决这个问题,可以按照以下步骤进行操作:
下面是一个示例代码:
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
var originalData = ["Apple", "Banana", "Orange", "Mango", "Grapes"]
var searchData = [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 searchData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = searchData[indexPath.row]
return cell
}
// MARK: - UISearchBarDelegate
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchData = originalData.filter({ $0.lowercased().contains(searchText.lowercased()) })
tableView.reloadData()
}
}
在上述示例代码中,我们创建了一个originalData数组来存储原始数据,创建了一个searchData数组来存储搜索结果。在搜索框的文本变化事件中,我们使用filter方法对originalData进行筛选,并将筛选结果存储到searchData数组中。在cellForRowAt方法中,我们使用searchData数组来获取正确的数据并显示在TableView中。
这样,当用户在搜索框中输入文本时,TableView将根据输入的文本内容进行筛选,并正确显示搜索结果。
推荐的腾讯云相关产品:
请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行决策。
领取专属 10元无门槛券
手把手带您无忧上云