首页 > 解决方案 > Swift:如何使用 Firebase 中的数据过滤表格单元格

问题描述

我创建了一个包含 Firebase 数据的表格视图。现在我想添加一个搜索栏来过滤我的数据storeName

这是我当前的表视图控制器的外观:

我的数据库如下所示:

在此处输入图像描述

我的数据模型(StoreModel):

class StoreModel{
    var name: String?
    var desc: String?
    var url: String?
    var rate: Double

init(
    name: String?, desc: String?, url: String?, rate: Double){
    self.name = name
    self.desc = desc
    self.url = url
    self.rate = rate
}

我如何从 Firebase 获取数据:

var storeList = [StoreModel]()

var refStores: DatabaseReference!

override func viewDidLoad() {
    super.viewDidLoad()

    FirebaseApp.configure()
    refStores = Database.database().reference().child("stores")
    refStores.observe(DataEventType.value, with: {(snapshot) in
    if snapshot.childrenCount > 0{
        self.storeList.removeAll()
        for stores in snapshot.children.allObjects as! [DataSnapshot]{
            let storeObject = stores.value as? [String: AnyObject]
            let storeName = storeObject?["storeName"]
            let storeDesc = storeObject?["storeDesc"]
            let storeUrl = storeObject?["storeUrl"]
            let storeRate = storeObject?["storeRate"]
            let store = StoreModel(
                        name: storeName as! String?, desc: storeDesc as! String?, url: storeUrl as! String?, rate: storeRate as! Double)

            self.storeList.append(store)
        }
        self.tblSearch.reloadData()
        }
    })
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ViewControllerTableViewCell

    let store: StoreModel

    store = storeList[indexPath.row]

    cell.labelName.text = store.name
    cell.labelDesc.text = store.desc
    cell.imageStore.setImage(from: store.url)
    cell.imageStore.clipsToBounds = true
    cell.imageStore.layer.cornerRadius = 20
    cell.imageGrey.clipsToBounds = true
    cell.imageGrey.layer.cornerRadius = 20
    cell.cosmosView.rating = store.rate

    return cell
}

谢谢你的帮助!

标签: iosswiftfirebaseuitableviewsearch

解决方案


试试下面的。

import UIKit
import FirebaseDatabase

class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    // MARK: - Variables
    var refStores: DatabaseReference!

    func runSearch(key: String) {
        _ = refStores.queryOrdered(byChild: "storeName").queryEqual(toValue: key).observeSingleEvent(of: .value, with: { (dataSnapshot) in
        if dataSnapshot.childrenCount > 0 {
            for store in dataSnapshot.children.allObjects as! [DataSnapshot] {
                let key = store.key
                let object = store.value as! [String: Any]
                let storeDesc = object["storeDesc"] as! String
                let storeUrl = object["storeUrl"] as! String
                let storeRate = object["storeRate"] as! Int
                let storeModel = StoreModel(...
                self.storeList.append(storeModel)
            }
        }
        self.tableView.reloadData()
    }, withCancel: {(Err) in
        print(Err.localizedDescription)
    })
}

推荐阅读