我有一个下载JSON文件并在TableView中显示结果的搜索,如果用户搜索某个内容并得到结果列表,然后搜索其他内容,但返回0个结果。第一组结果仍在TableView中。我希望在每次开始新搜索时清除TableView,以防止出现这种情况。我'我尝试过将数据源设置为nil并重新加载TableView,但没有效果。下面是我得到的结果:
var searchResults : [[String : AnyObject]]? = nil
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
print("DEBUG: searchBarSearchButtonClicked")
if searchBar.text > "" {
//--- This isn't working ---
searchResults = nil
tableView.reloadData()
//--------------------------
activityIndicator.startAnimating()
dbSearcher.startSearch(searchBar.text!) { (results) -> () in
self.searchResults = results
self.activityIndicator.stopAnimating()
self.tableView.reloadData()
}
searchBar.endEditing(true)
}
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchResults != nil {
print("DEBUG: Result count \(searchResults!.count)")
return searchResults!.count
} else {
print("DEBUG: Result count 0") //I don't see this other than when the ViewController first loads
return 0
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("searchResult")!
cell.textLabel?.text = searchResults![indexPath.row]["Title"] as? String
cell.detailTextLabel?.text = searchResults![indexPath.row]["Year"] as? String
//Display cover
let imageURL = searchResults![indexPath.row]["Poster"] as? String
if imageURL != "N/A" {
if let cover : UIImage = searchResults![indexPath.row]["Image"] as? UIImage {
cell.imageView?.image = cover
} else {
//Use default cover while the correct image downloads
//cell.imageView?.image = DEFAULT_COVER
downloadCover(imageURL!, tableViewRow: indexPath.row)
}
} else {
//Use default cover
//cell.imageView?.image = DEFAULT_COVER
}
return cell
}
3条答案
按热度按时间0lvr5msh1#
不要使用可选类型。
宣告非选择性的空数组。
那么
numberOfRowsInSection
可以是要清除表视图,请写入
无需解包,无需检查
nil
,没有问题。a1o7rhls2#
这篇文章是很久以前的事了,但对于任何感兴趣的人来说,这里是我在我的应用程序中使用的东西。
如果确实要使用
deleteRows
函数(例如,用于动画),则可以执行以下操作:它的基本功能是将范围
0..<count
转换为[IndexPath]
值,并指示表视图使用deleteRows
方法删除这些路径。2j4z5cfb3#
试试看: