使用UITextField搜索Realm对象

时间:2016-01-29 11:55:57

标签: ios search uitextfield realm

我有一个想要使用UITextField搜索的Realm对象列表。我在UITableViewController上添加了搜索功能,现在我想使用UITextField搜索这些对象,用户输入几个字母,然后对象开始出现在它下面。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

Apple提供了在表视图中搜索和过滤名为UISearchController的组件的目的。这为您提供了许多预定义的功能和用户交互,并且很好地集成了平台的外观和感觉。

但是因为用UITableViewController和Realm自己连接可能有点单调乏味,所以有一个开源组件ABFRealmSearchViewController可以为你节省一些工作,这样你就不会这里必须重新发明轮子。看看这个组件,我想您将获得一些洞察力,您需要做什么才能直接使用它或UISearchController。之前有教程如何开始使用SwiftObjective-C的组件。

答案 1 :(得分:1)

要使用强制使用UITextField的{​​{1}}代替UISearchController,您只需设置一个委托来响应UISearchBar委托方法:

UITextField

然后像上面的答案所说,使用文本字段中的文本过滤Realm中的对象:

textField(_ textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool

最后,使用let predicate = NSPredicate(format: "propertyToFilterOn contains[c] %@", textField.text!) let realm = try Realm() filteredObjects = realm.objects(ObjectClassName).filter(predicate) 的集合作为filteredObjects的数据源,向用户显示列表。确保在每次调用UITableView上的UITextFieldDelegatereloadData后重新运行搜索,以保持用户界面同步。

答案 2 :(得分:0)

我使用包含[c]的NSPredicate和UITextField中的文本,然后通过使用该谓词过滤realm.objects( Class )来提供Results对象

let predicate = NSPredicate(format: "fullName contains[c] %@", textField.text!)
let realm = try Realm()
patientsList = realm.objects(*ClassName*).filter(predicate)