我的情况是,我为UISearchbar
实现了代码库,并产生了animation
和expand
之类的collapse
效果。
在这里,每当我尝试search
添加自定义清除button
后搜索结果显示良好,它将operate
折叠动画,同时reload
将搜索结果添加到{ {1}}表original
。
我的问题是,每当我单击自定义清除按钮data
时,结果不会重新加载到search
中的original
数据中。
tableview
我的Tableview单元格
func didTapFavoritesBarButtonOFF() {
self.navigationItem.setRightBarButtonItems([self.favoritesBarButtonOn], animated: false)
print("Hide Searchbar")
// Reload tableview
searchBar.text = nil
searchBar.endEditing(true)
filteredData.removeAll()
self.tableView.reloadData() // not working
// Dismiss keyboard
searchBar.resignFirstResponder()
// Enable navigation left bar buttons
self.navigationItem.leftBarButtonItem?.isEnabled = false
let isOpen = leftConstraint.isActive == true
// Inactivating the left constraint closes the expandable header.
leftConstraint.isActive = isOpen ? false : true
// Animate change to visible.
UIView.animate(withDuration: 1, animations: {
self.navigationItem.titleView?.alpha = isOpen ? 0 : 1
self.navigationItem.titleView?.layoutIfNeeded()
})
}
答案 0 :(得分:1)
您需要将数据源数组设置为原始数组。
原因
实际上,您正在删除数据源数组filteredData.removeAll()
。此后,数组为空,这是self.tableView.reloadData()
无法正常工作的原因。
解决方案
您需要制作数据源数组的副本,假设originalData
包含原始数据(不带过滤器)。
每当您使用过滤器时,都需要使用originalData
来过滤数据。
例如。
let filterdData = originalData.filter { //filter data }
因此,当清除过滤器时,需要再次将原始数据设置为表数据源数组。
例如。
filteredData.removeAll() //remove all data
filterData = originalData //Some thing that you need to assign for table data source
self.tableView.reloadData()
在表的cellForRowAt:
中将获得以下数据...
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var obj = filterData[indexPath.row]
print(obj)
}
不要忘记在过滤器之前将数据分配给originalData