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

数组中字符串的 UISearchBar

UITableView 单元格上的 Peek 和 Pop 使用 UISearchController 失败

谁能告诉我为啥我的过滤数组是空的?

Listview 没有被填充,getView() 没有被调用