簡體   English   中英

在TableView的領域上顯示resultArray

[英]Show resultArray on realm on TableView

我想實現一種反向查找功能。 如何通過2個不同的UITextField從領域查詢數據。

有一個稱為Items的領域類,其屬性稱為ingredient1ingredient 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM