簡體   English   中英

Swift:如何使用Firebase中的數據過濾表格單元

[英]Swift: How to filter Table Cells with data from Firebase

我創建了一個包含Firebase數據的表視圖。 現在,我想添加一個搜索欄,以按storeName過濾數據。

這是我當前的Table View Controller的外觀:

我的數據庫如下所示:

在此處輸入圖片說明

我的數據模型(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
}

謝謝你的幫助!

請嘗試以下方法。

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)
    })
}

暫無
暫無

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

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