在我的应用程序中,我有一个搜索栏,人们可以在其中添加自由文本并获得符合条件的结果
func search(searchClinics: [Clinica], searchArr: [String]) -> [Clinica] {
var searchArr = searchArr
// base case - no more searches - return clinics found
if searchArr.count == 0 {
return searchClinics
}
// itterative case - search clinic with next search term and pass results to next search
let foundClinics = searchClinics.filter { item in
(item.name.lowercased() as AnyObject).contains(searchArr[0]) ||
item.specialty1.lowercased().contains(searchArr[0]) ||
item.specialty2.lowercased().contains(searchArr[0])
}
// remove completed search and call next search
searchArr.remove(at: 0)
return search(searchClinics: foundClinics, searchArr: searchArr)
}
我也有一个标志来标识是否正在使用searchBar
var searching = false // Checks if searchBar was used
如果使用searchBar,它将返回过滤后的数组数据,否则返回完整列表。例如
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching {
let totalClinics = clinicsSearch.count
if totalClinics == 0 {
return 1
} else {
return totalClinics
}
} else {
let totalClinics = clinics.count
if totalClinics == 0 {
return 1
} else {
return totalClinics
}
}
}
我现在愿意添加另一个viewController,用户可以在其中定义特定的过滤器(例如州,城市,专业等)。用户单击应用后,它将返回到先前的带有过滤数据的viewController。
我对应用此过滤器的最佳方法有疑问。起初我虽然想做类似的事情:
我在stackoverflow中进行了很多搜索,但是我发现了很多过滤/搜索栏的东西,但都与单独的搜索/过滤器viewController没有关系。您会推荐这种方法还是有更好的方法呢?如果执行第4步,这是我的关注之一...如果我调用segue,我会不会堆叠视图并占用更多内存?
谢谢
在我的应用程序用户中,单击过滤器按钮,然后打开控制器
let vc = storyboard?.instantiateViewController(withIdentifier: "searchFilter") as! SearchFilter
vc.modalPresentationStyle = .overCurrentContext
vc.SearchCompletion = {(model,flag) in
if(flag){
self.serachArr.removeAllObjects()
for i in 0..<model.count{
self.serachArr.add(ListModel(data: model[i] as! NSDictionary))
}
self.ListTable.reloadData()
}
}
self.present(vc, animated: true, completion: nil)
用户单击应用按钮并在以前的Viewcontroller中传递数据
self.SearchCompletion(dataArr,true)