Swift-Firebase:如何搜索多个数据?

问题描述 投票:0回答:1

我想知道如何在Firebase中搜索多条目。

现在我只能用一个条目(活动名称)进行搜索。

活动表,我标记了*,需要在其中添加*到搜索条目:活动{* act_id* act_name* act_region* act_district* act_subDistrict* act_fee* act_type* act_startTime* act_endTimeact_statusact_owneract_intro}

这是我的搜索控制器代码。谢谢您的帮助。

import UIKit
import FirebaseDatabase

class SearchTableViewController: UITableViewController, UISearchResultsUpdating {

let searchController = UISearchController(searchResultsController: nil)

@IBOutlet var searchCenterTableView: UITableView!

var userArray = [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("Activity").queryOrdered(byChild: "act_name").observe(.childAdded, with: { (snapshot) in
        self.userArray.append(snapshot.value as? NSDictionary)
        self.searchCenterTableView.insertRows(at: [IndexPath(row: self.userArray.count-1, section: 0)], with: UITableViewRowAnimation.automatic)
    }) { (error) in
        print(error.localizedDescription)
    }
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if searchController.isActive && searchController.searchBar.text != ""{
        return filteredUsers.count
    }
    return self.userArray.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
    let user : NSDictionary?
    if searchController.isActive && searchController.searchBar.text != ""{
        user = filteredUsers[indexPath.row]
    }else{
        user = self.userArray[indexPath.row]
    }

    cell.textLabel?.text = user?["act_name"] as? String
    cell.detailTextLabel?.text = user?["act_subDistrict"] as? String

    return cell
}

func updateSearchResults(for searchController: UISearchController) {
    filterContent(searchText: self.searchController.searchBar.text!)
}

func filterContent(searchText:String){
    self.filteredUsers = self.userArray.filter{ user in
        let username = user!["act_name"] as? String

        return(username?.lowercased().contains(searchText.lowercased()))!
    }

    tableView.reloadData()
}

}
swift firebase search
1个回答
0
投票
func filterContent(searchText:String){
    self.filteredUsers = self.userArray.filter{ user in
         if let username = user!["act_name"] as? String, let subDistrict = user!["act_subDistrict"] as? String {

              let entry1 = username.lowercased().contains(searchText.lowercased())
              let entry2 = subDistrict.lowercased().contains(searchText.lowercased())
        return(entry1 || entry2)

         }
    }
    tableView.reloadData()
}
© www.soinside.com 2019 - 2024. All rights reserved.