在数组中使用作用域栏(拆分视图)进行筛选搜索



所以我有一个蔬菜对象,除其他属性外,还有一个数组foodArray,看起来像这样["Stew, "Salad"]表示食物可以包含在哪个食谱中,如果食品储藏室中不再找到蔬菜,则["Eaten"]。所以例如:

let carrot = Vegetable(name: "carrot", foodArray: ["Stew"])
let tomato = Vegetable(name: "tomato", foodArray: ["Salad"])
let onion = Vegetable(name: "onion", foodArray: ["Stew", "Salad"])
let corn = Vegetable(name: "corn", foodArray: ["Eaten"])

所有这些蔬菜对象都将存储在名为vegetables的蔬菜数组中。

我的问题是我是否可以使用此数组的值来设置过滤搜索。

我已经实现了 SplitView 并设置了搜索栏,并有一个包含蔬菜对象列表的表格视图。我希望作用域栏具有在数组中找到的不同字符串(配方名称)。例如,"炖菜"、"沙拉"、"吃"是范围按钮,当用户在范围按钮内搜索时,foodArray 中具有该按钮的所有蔬菜对象都会弹出。

目前,除了我的范围的实现之外,我的代码工作正常。这是我到目前为止的代码:

func filterContentForSearchText(_ searchText: String, scope: String = "All") {
filteredVegetables = vegetable.filter({( vegetable : Vegetable) -> Bool in
let categoryMatch = (scope == "All") || (vegetable.foodArray == scope)
return categoryMatch && vegetable.name.lowercased().contains(searchText.lowercased())
})
tableView.reloadData()
}

有人可以告诉我如何修改此filterContentForSearchText函数以搜索数组并使范围按钮成为数组中的不同可能值(假设它们只是我上面列出的三个,即"吃"、"沙拉"、"炖")?我想维护情节提要拆分视图设置。任何帮助,不胜感激。

您可以在UISearchBarDelegate方法searchBar(_:selectedScopeButtonIndexDidChange:)中将containsfilter一起使用。

func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
let food: String 
if selectedScope == 0 {
food = "Stew"
}
else if selectedScope == 1 {
food = "Salad"
}
else {
food = "Eaten"
}
filteredVegetables = vegetable.filter { $0.foodArray.contains(food) }
self.tableView.reloadData()
}

最新更新