簡體   English   中英

如何讓我的 CollectionView 單元格從我的 TableView 中過濾數據?

[英]How do I make my CollectionView Cells filter data from my TableView?

我在嘗試讓我的集合視圖為集合視圖中設置的類別過濾表視圖中的數據時遇到問題。 我的目標是在集合視圖中選擇一個類別,從 categoryLabel 中顯示的類別中顯示 tableview 中所選類別的搜索結果:

表格視圖已經連接到搜索欄並准確呈現搜索結果。 但我希望它對集合視圖中的選擇/類別執行相同的操作,以過濾掉選擇的結果,以在集合視圖中顯示該特定類別的搜索結果。

我的數據存儲在 Cloud Firestore

  import Foundation
  import UIKit

  class Category {
      var categoryLabel: String

      init(categoryLabel: String) {

          self.categoryLabel = categoryLabel

      }

      class func createCategoryArray() -> [Category] {

          var categorys: [Category] = []

          let category1 = Category(categoryLabel: "All")
          let category2 = Category(categoryLabel: "Flower")
          let category3 = Category(categoryLabel: "CBD")
          let category4 = Category(categoryLabel: "Pre-Roll")
          let category5 = Category(categoryLabel: "Pens")
          let category6 = Category(categoryLabel: "Cartridges")
          let category7 = Category(categoryLabel: "Concentrate")
          let category8 = Category(categoryLabel: "Edible")
          let category9 = Category(categoryLabel: "Drinks")
          let category10 = Category(categoryLabel: "Tinctures")
          let category11 = Category(categoryLabel: "Topical")
          let category12 = Category(categoryLabel: "Gear")

          categorys.append(category1)
          categorys.append(category2)
          categorys.append(category3)
          categorys.append(category4)
          categorys.append(category5)
          categorys.append(category6)
          categorys.append(category7)
          categorys.append(category8)
          categorys.append(category9)
          categorys.append(category10)
          categorys.append(category11)
          categorys.append(category12)

          return categorys

      }
  }

  import UIKit

  class CategoryScrollCell: UICollectionViewCell {

      @IBOutlet weak var categoryScroll: UILabel!
      @IBOutlet weak var view: UIView!

      func setCategory(category: Category) {
          categoryScroll.text = category.categoryLabel
      }
  }

  import UIKit
  import Firebase

  class ProductListController: UIViewController {


      @IBOutlet weak var searchBar: UISearchBar!
      @IBOutlet weak var productListCollectionView: UICollectionView!
      @IBOutlet weak var productListTableView: UITableView!

      var categorys: [Category] = []
      var searchActive : Bool = false
      var productInventory: [ProductList] = []
      var productSetup: [ProductList] = []


      override func viewDidLoad() {
          super.viewDidLoad()

          categorys = Category.createCategoryArray()

          productListCollectionView.dataSource = self
          productListCollectionView.delegate = self
          productListTableView.dataSource = self
          productListTableView.delegate = self
          searchBar.delegate = self

          fetchProducts { (products) in
              self.productSetup = products
              self.productListTableView.reloadData()
          }
       }

       func fetchProducts(_ completion: @escaping ([ProductList]) -> Void) {
          let ref = Firestore.firestore().collection("products")
          ref.addSnapshotListener { (snapshot, error) in
              guard error == nil, let snapshot = snapshot, !snapshot.isEmpty else {
                  return
              }
              completion(snapshot.documents.compactMap( {ProductList(dictionary: $0.data())} ))
          }
      }
  }

  extension ProductListController: UITableViewDelegate, UITableViewDataSource {
      func numberOfSections(in tableView: UITableView) -> Int {
          return 1
      }
      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

          return productSetup.count
     }

     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
           guard let cell = tableView.dequeueReusableCell(withIdentifier: "ProductListCell") as?
        ProductListCell else { return UITableViewCell() }

          cell.configure(withProduct: productSetup[indexPath.row])

          return cell
      }

   }

   extension ProductListController: UICollectionViewDelegate, UICollectionViewDataSource{

      func numberOfSections(in collectionView: UICollectionView) -> Int {
          return 1
      }
      func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

          return categorys.count
      }

      func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
          let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CategoryScrollCell", for: indexPath) as! CategoryScrollCell
          let category = categorys[indexPath.row]

          cell.setCategory(category: category)

          return cell
      }

      func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
             print("selected")
             self.productSetup.category = self.productInventory[indexPath.row]
      }
  }

據我了解你的問題,

首先,這是我的建議:

  • 不要使用 UITableView 和 UICollectionView。 無需同時使用兩個 UI 滾動類。 您可以僅使用 UICollectionView 來實現它。
  • 只需為類別過濾器列表創建一個 collectionView 單元格並在第 0 個索引處返回它。

現在來解決您的問題,您只需使用 CollectionView 中的部分數量來顯示具有每個過濾類別的產品。

暫無
暫無

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

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