在TableView上的域上显示resultArray
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在TableView上的域上显示resultArray相关的知识,希望对你有一定的参考价值。
我想实现一个反向查找功能。如何通过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
被触发时,我认为有任何值的项目为零。然后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)
以上是关于在TableView上的域上显示resultArray的主要内容,如果未能解决你的问题,请参考以下文章
Google Apps 域上的 Google App Engine