【发布时间】:2019-06-04 10:57:20
【问题描述】:
我有一个 tableView,我使用无限滚动来批量填充 firestore 数据。另外我有一个搜索栏,我正在尝试使用文本栏中的文本查询 firestore,然后将其填充到 tableview 中。我有 3 个主要问题。
当我第一次单击搜索时,我得到一个空数组和一个空的 tableview,但是当我第二次单击搜索时,一切似乎都很好。
当我最终填充搜索到的内容时,我希望在滚动时停止获取新内容。
如果我输入了错误的单词并按了搜索,那么我会得到上一个搜索结果,然后“未找到任何成分”会打印两次。
这是我的 searchBar 代码:
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
guard let text = searchBar.text else {return}
searchIngredients(text: text)
self.searchBarIngredient.endEditing(true)
print("\(searchIngredients(text: text))")
}
点击搜索时的函数代码
func searchIngredients(text: String) -> Array<Any>{
let db = Firestore.firestore()
db.collection("Ingredients").whereField("compName", arrayContains: text).getDocuments{ (querySnapshot, err) in
if let err = err {
print("\(err.localizedDescription)")
print("Test Error")
} else {
if (querySnapshot!.isEmpty == false){
self.searchedIngredientsArray = querySnapshot!.documents.compactMap({Ingredients(dictionary: $0.data())})
}else{
print("No Ingredients found")
}
}
}
self.tableView.reloadData()
ingredientsArray = searchedIngredientsArray
return ingredientsArray
}
最后是滚动代码
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let off = scrollView.contentOffset.y
let off1 = scrollView.contentSize.height
if off > off1 - scrollView.frame.height * leadingScreensForBatching{
if !fetchMoreIngredients && !reachEnd{
beginBatchFetch()
}
}
}
我不写 beginBatchFetch() 因为它工作正常,我认为不相关。 提前致谢。
【问题讨论】:
标签: swift firebase uitableview google-cloud-firestore uisearchbar