gpt4 book ai didi

ios - 搜索栏未正确过滤

转载 作者:行者123 更新时间:2023-11-28 15:21:02 25 4
gpt4 key购买 nike

我的表格 View 中有一个搜索栏,但是当我最初单击搜索栏时,结果消失了。如果我切换到另一个 Controller ,然后返回,搜索栏工作正常,点击该栏时会显示所有结果。

代码如下:

@IBOutlet weak var toolTable: UITableView!
@IBOutlet weak var searchForTool: UISearchBar!

var searchActive : Bool = false
{
didSet {
if searchActive != oldValue {
toolTable?.reloadData()
}
}
}

typealias Item = (data: String, identity: String)

var filtered: [Item] = []
var items: [Item] = [
(data: " Data1", identity: "A"),
(data: " Data2", identity: "B")
]

override func viewDidLoad() {
super.viewDidLoad()

toolTable.delegate = self
toolTable.dataSource = self

searchForTool.delegate = self

}

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
searchActive = true
}

func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
searchActive = false
}

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchActive = false
}

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchActive = false
}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

filtered = items.filter { item in
item.data.localizedCaseInsensitiveContains(searchText)
}

searchActive = !filtered.isEmpty

self.toolTable.reloadData()
}


override func numberOfSections(in tableView: UITableView) -> Int {

return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if(searchActive) {
return filtered.count
}

return items.count

}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell

if(searchActive){
cell.toolLabel.text = filtered[indexPath.row].data
} else {
cell.toolLabel.text = items[indexPath.row].data
}

return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vcName: String
if searchActive {
vcName = filtered[indexPath.row].identity
} else {
vcName = items[indexPath.row].identity
}
let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
self.navigationController?.pushViewController(viewController!, animated: true)

}

我确信这是一些简单的解决方案,我只是忽略了它。

如有任何帮助,我们将不胜感激。

最佳答案

阅读您的代码我发现:searchBarTextDidBeginEditingsearchActive 设置为 true。数据将根据 didSet 中的代码重新加载。然后调用 tableView:numberOfRowsInSection 并返回 filtered.count,这意味着 0 因为它是空的。这就是结果消失的原因。

关于ios - 搜索栏未正确过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46006753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com