iOS / Swift - добавление фильтра для извлечения данных из Firebase - PullRequest
0 голосов
/ 18 декабря 2018

То, что я получил до сих пор, - это tableView и пользовательские ячейки с кальяном.К ним относятся изображение, имя, бренд и идентификатор.Теперь я пытаюсь найти в основном табличное представление, которое содержит только ячейки с атрибутами, основанными на «фильтре».Например, tableView, который появляется в начале, имеет только две следующие настройки, чтобы упростить его: PriceRange и BrandName.При первой загрузке таблицы просмотра это 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
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...