updateSearchResults() 没有被调用
Posted
技术标签:
【中文标题】updateSearchResults() 没有被调用【英文标题】:updateSearchResults() not getting called 【发布时间】:2017-01-10 03:46:00 【问题描述】:我已经阅读了关于 SO 的类似问题和解决方案。但似乎没有一个能解决我的问题。我正在使用自定义搜索控制器和自定义搜索栏,并且 func updateSearchResults(for searchController: UISearchController) 没有被调用。
var customSearchController: CustomSearchViewController!
CustomSearchViewController:在 ViewDidLoad() 中
customSearchController = CustomSearchViewController(searchResultsController: ***nil***, searchBarFrame: CGRect(x: 0.0, y: 0.0, width: searchTableView.frame.size.width, height: 44.0), searchBarFont: UIFont(name: "HelveticaNeue", size: 16.0)!, searchBarTextColor: UIColor.purple, searchBarTintColor: UIColor.white)
customSearchController.searchResultsUpdater = self
customSearchController.definesPresentationContext = true
customSearchController.customSearchBar.placeholder = "What are you looking for?"
customSearchController.customSearchBar.backgroundColor = UIColor.white
customSearchController.customSearchBar.sizeToFit()
customSearchController.customSearchBar.resignFirstResponder()
customSearchController.customSearchBar.showsCancelButton = true
customSearchController.customSearchBar.delegate = self
没有被调用::(
func updateSearchResults(for searchController: UISearchController)
filtered.removeAll()
filtered = searchArray.filter( (text) -> Bool in
let tmp: NSString = text as NSString
let range = tmp.range(of: customSearchController.customSearchBar.text!, options: NSString.CompareOptions.caseInsensitive)
return range.location != NSNotFound
)
self.searchTableView.reloadData()
【问题讨论】:
SearchResultsUpdating not being called in UISearchController的可能重复 【参考方案1】:经过几个小时的努力,我能够通过以下方式解决它: func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) - UISearchBarDelegate 委托方法。
代替 updateSearchResults() - UISearchResultsUpdating 委托方法
希望它可以帮助某人:)
【讨论】:
【参考方案2】:我必须在类范围内声明UISearchController
实例。看到这个答案。 https://***.com/a/46781890/1511978
之前我在viewDidLoad
方法中声明了它
【讨论】:
是的,当然!否则一旦超出范围就会被释放【参考方案3】:看起来你没有设置这个:
searchController.searchResultsUpdater = self
确保这是最后一个命令以避免出错。至少这对我有用。
【讨论】:
这不是答案...请参阅:***.com/a/46781890/1511978【参考方案4】:但也许你的问题是你这样称呼:
navigationItem.titleView = searchController.searchBar
相反,您应该这样做:
navigationItem.searchController = searchController
【讨论】:
你能提供一个理由吗,为什么这会有所帮助? 其实这两种情况我都试过了,发现第二种可行,第一种不行。 我认为原因是,在第一种情况下,搜索控制器没有添加到视图中(只是 searchBar),所以我不能听它的变化,所以不会调用方法 'updateSearchResults' .以上是关于updateSearchResults() 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章
updateSearchResults 方法中 didSelectRow 的索引超出范围
UISearchResultsUpdating 不基于 searchBar 文本过滤 collectionView