2017-02-15 32 views
0

所以我有一個Vegetable對象,其中包括其他屬性,有一個數組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,並設置了搜索欄,並有一個蔬菜對象列表的表視圖。我希望範圍欄具有數組中找到的不同字符串(配方名稱)。例如,「Stew」,「Salad」,「Eaten」是範圍按鈕,當用戶在範圍按鈕內搜索時,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功能通過數組搜索和有範圍的按鈕是數組中的不同可能值(假設他們只我上面列出的三個「即食」,「沙拉」,「燉」)?我想維護我的故事板分割視圖設置。任何幫助表示讚賞。

回答

1

您可以在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() 
} 
+0

謝謝!是否有可能將兩個值合併到一個範圍中?例如,如果我想要兩個示波器按鈕:「食譜」和「食譜」,其中「食譜」包含「燉」和「沙拉」? – ch1maera

+0

是的,就是這樣。 – ch1maera

+0

@ ch1maera對於'Eaten'過濾器和我現在的'Recipe'解決方案相同,你可以用這種方式過濾你的數組。 'filteredVegetables = vegetable.filter {$ 0.foodArray.contains(「Stew」)|| $ 0.foodArray.contains(「沙拉」)}' –