iOS / Swift-追加过滤器以从Firebase检索数据

时间:2018-12-17 22:38:03

标签: ios swift firebase

到目前为止,我得到的是一个关于水烟烟草的tableView和自定义单元格。这些包括图像,名称,品牌和ID。现在,我尝试达到的基本上是一个表格视图,该表格视图仅包含具有基于“过滤器”属性的单元格。例如,出现在开头的tableView仅具有以下两个设置以使其简单:PriceRange和BrandName。第一次加载tableView时,这些价格范围是PriceRange:0-100和Brands:所有品牌。然后,假设用户限制使用0到15欧元(欧元)和唯一的品牌“ 7天”。重新加载tableView时该怎么做?

import UIKit
import Firebase

class ShopViewController: UIViewController, UISearchBarDelegate {
    @IBOutlet weak var button_filter: UIBarButtonItem!
    @IBOutlet weak var searchBar_shop: UISearchBar!
    @IBOutlet weak var view_navigator: UIView!
    @IBOutlet weak var tableView_shop: UITableView!
    var ShopCells: [ShopCell] = []
    var databaseRef: DatabaseReference!
    var storageRef: StorageReference!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.databaseRef = Database.database().reference()
        self.storageRef = Storage.storage().reference()
        createArray() { shopCells in
            for item in shopCells {
                self.ShopCells.append(item)
            }
            DispatchQueue.main.async {
                self.tableView_shop.reloadData()
            }
        }
        self.navigationItem.title = "Shop"
        self.tableView_shop.delegate = self
        self.tableView_shop.dataSource = self
        self.searchBar_shop.delegate = self
        self.searchBar_shop.barTintColor = UIColor(hexString: "#1ABC9C")
        self.view_navigator.backgroundColor = UIColor(hexString: "#1ABC9C")
        self.tableView_shop.separatorColor = UIColor.clear
        self.searchBar_shop.isTranslucent = false
        self.searchBar_shop.backgroundImage = UIImage()
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ShopViewController.viewTapped(gestureRecognizer:)))
        view.addGestureRecognizer(tapGesture)
    }

    @objc func viewTapped(gestureRecognizer: UITapGestureRecognizer) {
        view.endEditing(true)
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        self.searchBar_shop.resignFirstResponder()
    }

    func createArray(completion: @escaping ([ShopCell]) -> () ) {
        var tempShopCells: [ShopCell] = []
        let rootRef = Database.database().reference()

        let query = rootRef.child("tobaccos").queryOrdered(byChild: "name")
        query.observeSingleEvent(of: .value) { (snapshot) in
            let dispatchGroup = DispatchGroup()
            for child in snapshot.children.allObjects as! [DataSnapshot] {
                let value = child.value as? [String: Any];
                let name = value?["name"] as? String ?? "";
                let brand = value?["brand"] as? String ?? "";
                let iD = value?["iD"] as? String ?? "";

                dispatchGroup.enter()
                let imageReference = Storage.storage().reference().child("tobaccoPictures").child("\(iD).jpg")
                imageReference.getData(maxSize: (1 * 1024 * 1024)) { (data, error) in
                    if let _error = error{
                        print(_error)
                    } else {
                        if let _data  = data {
                            let image: UIImage! = UIImage(data: _data)
                            tempShopCells.append(ShopCell(productName: name, brandName: brand, productImage: image, iD: iD))
                        }
                    }
                    dispatchGroup.leave()
                }
            }
            dispatchGroup.notify(queue: .main) {
                completion(tempShopCells)
            }
        }
    }
}

extension ShopViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.ShopCells.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let shopCell = ShopCells[indexPath.row]
        let cell = tableView_shop.dequeueReusableCell(withIdentifier: "ShopCell") as! ShopTableViewCell
        cell.setShopCell(shopCell: shopCell)
        return cell
    }

}

0 个答案:

没有答案