[英]Search Realm objects with UITextField
我有一個我想要使用UITextField
搜索的Realm對象列表。 我在UITableViewController
上添加了搜索功能,現在我想使用UITextField
搜索這些對象,用戶輸入幾個字母,然后對象開始出現在它下面。 我怎樣才能做到這一點 ?
Apple提供了在表視圖中搜索和過濾名為UISearchController
的組件的目的。 這為您提供了許多預定義的功能和用戶交互,並且很好地集成了平台的外觀和感覺。
但是因為用UITableViewController
和Realm自己連接可能有點單調乏味,所以有一個開源組件ABFRealmSearchViewController
可以為你節省一些工作,所以你不必在這里重新發明輪子。 看看這個組件,我想你會得到一些見解,你需要做什么才能直接使用它或UISearchController
。 之前有一些教程如何開始使用Swift和Objective-C的組件。
我使用了contains[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)
要使用強制使用UISearchController
的UITextField
而不是UISearchBar
,您只需設置一個委托來響應UITextField
委托方法:
textField(_ textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
然后像上面的答案所說,使用文本字段中的文本過濾Realm中的對象:
let predicate = NSPredicate(format: "propertyToFilterOn contains[c] %@", textField.text!)
let realm = try Realm()
filteredObjects = realm.objects(ObjectClassName).filter(predicate)
最后,使用filteredObjects
的集合作為UITableView
的數據源,向用戶顯示列表。 確保在每次調用UITextFieldDelegate
和UITableView
上的reloadData
之后重新運行搜索以保持UI同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.