簡體   English   中英

使用UITextField搜索Realm對象

[英]Search Realm objects with UITextField

我有一個我想要使用UITextField搜索的Realm對象列表。 我在UITableViewController上添加了搜索功能,現在我想使用UITextField搜索這些對象,用戶輸入幾個字母,然后對象開始出現在它下面。 我怎樣才能做到這一點 ?

Apple提供了在表視圖中搜索和過濾名為UISearchController的組件的目的。 這為您提供了許多預定義的功能和用戶交互,並且很好地集成了平台的外觀和感覺。

但是因為用UITableViewController和Realm自己連接可能有點單調乏味,所以有一個開源組件ABFRealmSearchViewController可以為你節省一些工作,所以你不必在這里重新發明輪子。 看看這個組件,我想你會得到一些見解,你需要做什么才能直接使用它或UISearchController 之前有一些教程如何開始使用SwiftObjective-C的組件。

我使用了contains[c]NSPredicateUITextField的文本,然后通過使用該謂詞過濾realm.objects(*Class*)來提供Results對象

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

要使用強制使用UISearchControllerUITextField而不是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的數據源,向用戶顯示列表。 確保在每次調用UITextFieldDelegateUITableView上的reloadData之后重新運行搜索以保持UI同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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