将UISearchController与swift中的Async结果更新集成

时间:2016-06-05 10:52:29

标签: json swift uisearchcontroller swifty-json

我想实现UISearchContoller,它使用swifty json从webservice JSON中搜索,就像苹果的appStore一样,当你搜索一个应用程序时,它加载而不加载到tableView

这是我在updateSearchResultsForSearchController方法中所做的:

func updateSearchResultsForSearchController(searchController: UISearchController) {
    filterContentForSearchText(searchController.searchBar.text!)
}


func filterContentForSearchText(searchText: String) {
filteredContents = myStruct.filter{$0.name.rangeOfString(searchText) != nil

} 

1 个答案:

答案 0 :(得分:0)

发布更多代码会很好,就像您用来从Web服务获取结果一样。但是,无论如何,我会尝试引导您完成它。

我在使用UISearchBar及其代理方法之前已经完成了,用户按下了搜索按钮或输入,我会使用NSURLSession将用户的搜索词传递给API,解析了响应。

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    let searchText : String = searchBar.text
    webService.getRecipe(ingredient: searchText, completionHandler: { (recipeArray) in
            self.highProteinArray = recipeArray
            dispatch_async(dispatch_get_main_queue(), {
                self.collectionView.reloadData()
            })
        })
}

正如您所看到的,我使用回调来处理将新解析的数据设置为变量供以后使用,然后重新加载collectionView。这样,当您等待Web服务的响应然后解析它时,tableView / collectionView将加载并设置自己,一旦完成,您只需重新加载以显示新数据。

要添加一些额外的内容,你甚至可以在你的cellForItemAtIndexPath或cellForRowAtIndexPath中添加一个淡入淡出的动画,无论你使用哪个。