Filter viewController

问题描述 投票:0回答:1

在我的应用程序中,我有一个搜索栏,人们可以在其中添加自由文本并获得符合条件的结果

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。

我对应用此过滤器的最佳方法有疑问。起初我虽然想做类似的事情:

  1. 用户单击导航栏中的按钮并打开“搜索” viewController;
  2. 用户输入数据;
  3. 用户单击“应用”;
  4. 调用上一个viewController;
  5. 我将添加另一个状态标志,其状态为“ True”,将在我的tableView ViewController中使用。如果为true,则考虑应用了过滤器的诊所列表。如果没有,请显示诊所的完整列表;

我在stackoverflow中进行了很多搜索,但是我发现了很多过滤/搜索栏的东西,但都与单独的搜索/过滤器viewController没有关系。您会推荐这种方法还是有更好的方法呢?如果执行第4步,这是我的关注之一...如果我调用segue,我会不会堆叠视图并占用更多内存?

谢谢

swift search filter viewcontroller
1个回答
0
投票

在我的应用程序用户中,单击过滤器按钮,然后打开控制器

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)
© www.soinside.com 2019 - 2024. All rights reserved.