我的方案,我实现了代码库UISearchbar
与像animation
和expand
一些collapse
效果。
在这里,每当我试图search
以及显示搜索结果后,我添加了自定义清楚button
将operate
合拢动画同时reload
搜索结果original
表data
。
我的问题是,每当我点击自定义清除按钮search
结果不重装在original
到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()
})
}
我泰伯维细胞
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) as! CustomTableViewCell
cell.titleLabel.text = self.filteredData[indexPath.row]
return cell
}
您需要将数据源阵列设置成原来的一个。
原因
其实你要删除的数据源阵列filteredData.removeAll()
。在此之后的数组为空是self.tableView.reloadData()
不工作的原因。
解
你需要让数据源数组的副本,可以说originalData
包含原始数据(无过滤器)。
无论何时用户过滤器,那么你需要使用originalData
来过滤数据。
对于EG。
let filterdData = originalData.filter { //filter data }
所以,当你清晰过滤器您需要重新设置的原始数据表的数据源阵列。
对于EG。
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