我有一个想要使用UITextField搜索的Realm对象列表。我在UITableViewController上添加了搜索功能,现在我想使用UITextField搜索这些对象,用户输入几个字母,然后对象开始出现在它下面。我怎么能这样做?
答案 0 :(得分:1)
Apple提供了在表视图中搜索和过滤名为UISearchController
的组件的目的。这为您提供了许多预定义的功能和用户交互,并且很好地集成了平台的外观和感觉。
但是因为用UITableViewController
和Realm自己连接可能有点单调乏味,所以有一个开源组件ABFRealmSearchViewController
可以为你节省一些工作,这样你就不会这里必须重新发明轮子。看看这个组件,我想您将获得一些洞察力,您需要做什么才能直接使用它或UISearchController
。之前有教程如何开始使用Swift和Objective-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
上的UITextFieldDelegate
和reloadData
后重新运行搜索,以保持用户界面同步。
答案 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)