[英]Show resultArray on realm on TableView
我想實現一種反向查找功能。 如何通過2個不同的UITextField從領域查詢數據。
有一個稱為Items
的領域類,其屬性稱為ingredient1
到ingredient 6
。 我想過濾在用戶基於IngredientName1的textField上鍵入的用戶到成分6。如果用戶鍵入的值與這些屬性中的任何一個匹配,則應過濾變量項。
我的代碼:
let realm = try! Realm()
var items : Results<Items>?
@IBOutlet weak var ingredient1: UITextField!
@IBOutlet weak var ingredient2: UITextField!
@IBOutlet weak var tableView: UITableView!
當用戶完成鍵入並點按一個按鈕時。 我希望刷新TableView並將結果(在這種情況下為配方)列在上面。
@IBAction func searchButton(_ sender: UIButton) {
tableView.reloadData()
}
func textFieldDidEndEditing(_ textField: UITextField) {
if (ingredient1.text != "" && ingredient2.text == "") {
items = items?.filter("ingredientName1 || ingredientName2 || ingredientName3 || ingredientName4 || ingredientName5 || ingredientName6 CONTAINS[cd] %@", ingredient1)
print(ingredient1.text!)
} else if (ingredient1.text == "" && ingredient2.text != "") {
print("Enter Ingredient on Ingredient1 first")
} else if (ingredient1.text != "" && ingredient2.text != "") {
items = items?.filter("ingredientName1 CONTAINS[cd] %@ || ingredientName2 CONTAINS[cd] %@ || ingredientName3 CONTAINS[cd] %@ || ingredientName4 CONTAINS[cd] %@ || ingredientName5 CONTAINS[cd] %@ || ingredientName6 CONTAINS[cd] %@", ingredient1.text!, ingredient2.text!)
print("\(ingredient1.text!) \(ingredient2.text!)")
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items?.count ?? 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "searchedItemCell", for: indexPath)
cell.textLabel?.text = items?[indexPath.row].itemName ?? "No items Found"
return cell
}
這段代碼不會引發任何錯誤,但是在觸發textFieldDidEndEditing
時假設沒有任何值的項目上我沒有得到任何textFieldDidEndEditing
。 然后tableView
保持空白。
首先,您需要填充items
數組,如下所示:
items = realm.objects(Items.self)
在viewDidLoad
調用它。 之后,按如下所示更改您的過濾字符串:
let ingredient1Text = ingredient1.text ?? ""
items = items?.filter("ingredientName1 CONTAINS %@ ||
ingredientName2 CONTAINS %@ || ingredientName3 CONTAINS %@ ||
ingredientName4 CONTAINS %@ || ingredientName5 CONTAINS %@ ||
ingredientName6 CONTAINS %@", ingredient1Text, ingredient1Text,
ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text)
您必須傳遞與過濾字符串中的%@
值一樣多的參數。
例如,如果要按兩個字符串過濾,可以編寫如下內容:
let ingredient1Text = ingredient1.text ?? ""
let ingredient2Text = ingredient2.text ?? ""
cocktails = cocktails?
.filter("ingredientName1 CONTAINS %@ || ingredientName2 CONTAINS %@ || ingredientName3 CONTAINS %@ || ingredientName4 CONTAINS %@ || ingredientName5 CONTAINS %@ || ingredientName6 CONTAINS %@ || ingredientName1 CONTAINS %@ || ingredientName2 CONTAINS %@ || ingredientName3 CONTAINS %@ || ingredientName4 CONTAINS %@ || ingredientName5 CONTAINS %@ || ingredientName6 CONTAINS %@",
ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text,
ingredient2Text, ingredient2Text, ingredient2Text, ingredient2Text, ingredient2Text, ingredient2Text, ingredient2Text)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.