I'm new to both Xcode and firebase. I made this search bar yesterday, but I only had it to search for one thing (String). And now I'm asking how to search for all the data. The data is from firebase and is both numbers and text look it:
"Fornavn" - Text,
"Efternavn" - Text,
"Personnr" - Numbers
The code:
import UIKit
import FirebaseDatabase
class FindTableViewController: UITableViewController,
UISearchResultsUpdating {
@IBOutlet var FindTableView: UITableView!
let searchController = UISearchController(searchResultsController: nil)
var usersArray = [NSDictionary?]()
var filteredUsers = [NSDictionary?]()
var databaseRef = Database.database().reference()
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
databaseRef.child("Buyers").queryOrdered(byChild: "personnr").observe(.childAdded, with: {(snapshot) in
self.usersArray.append(snapshot.value as? NSDictionary)
self.FindTableView.insertRows(at: [IndexPath(row:self.usersArray.count-1,section:0)], with: UITableViewRowAnimation.automatic)
})
{ (error) in
print(error.localizedDescription)
}
And here is the function:
func updateSearchResults(for searchController: UISearchController) {
filterUsers(searchText: self.searchController.searchBar.text!)
}
func filterUsers (searchText:String) {
self.filteredUsers = self.usersArray.filter{ user in
let username = user!["Fornavn"] as? String
return(username?.lowercased().contains(searchText.lowercased()))!
}
tableView.reloadData()
}
Any clue on how to search for more than "Fornavn", text?
You can do something like this:
func filterUsers (searchText:String) {
self.filteredUsers = self.usersArray.filter{ user in
var searchResultForUserName = false
var searchResultForSecondSearch = false
var searchResultForThirdParam = false
if let username = user!["Fornavn"] as? String {
searchResultForUserName = username.lowercased().contains(searchText.lowercased())
}
if let secondSeachedStr = user!["Efternavn"] as? String {
searchResultForSecondSearch = secondSeachedStr.lowercased().contains(searchText.lowercased())
}
if let number = user!["Personnr"] as? String {
searchResultForThirdParam = number.lowercased().contains(searchText.lowercased())
}
return searchResultForUserName || searchResultForSecondSearch || searchResultForThirdParam
}
tableView.reloadData()
}
Note: Please use optional binding to unwrap optionals in your code