更新集合视图项

Posted

技术标签:

【中文标题】更新集合视图项【英文标题】:Updating collection view items 【发布时间】:2017-05-09 09:00:40 【问题描述】:

我在tableViewCell 中插入了一个collectionViewTableview 包含类别列表,collectionView 包含所有产品。如何根据选择的表格视图行在collectionView 中拥有不同数量的项目?我已经尝试存储选定的表视图行并使用它来定义要返回的项目数,但是它要么崩溃而没有错误代码,告诉我值是 nil 或者只是在 @987654327 中不显示任何 clitems @。任何帮助将不胜感激。感谢您的时间。

下面是我的代码:

我的自定义表格视图单元格:

extension ExpandableCell: UICollectionViewDelegate, UICollectionViewDataSource 




    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 

    let toReturn = categoryItems.count

        return counter
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        //
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CustomCollectionViewCell
        //What is this CustomCollectionCell? Create a CustomCell with SubClass of UICollectionViewCell
        //Load images w.r.t IndexPath
        print(self.selectedCategory.description)
        let newArray = starbucksMenu[selectedCategory]
        //cell.image.image = UIImage(named: (allItems[selectedCategory]?[indexPath.row])!)
        cell.label.text = categoryItems[indexPath.row]
        //cell.layer.borderWidth = 0.1




        return cell
    

我的表格视图委托方法:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        print(indexPath.row)
        word = indexPath.row
        guard let cell = tableView.cellForRow(at: indexPath) as? ExpandableCell
            else  return 

        switch cell.isExpanded
        
        case true:
            self.expandedRows.remove(indexPath.row)
            self.selectedCategory = ""
        case false:
            self.expandedRows.insert(indexPath.row)

        



        self.selectedCategory = categories[indexPath.row]
        print(self.selectedCategory)
        //self.array = starbucksMenu[starbucksMenuCategories[indexPath.row]]!
        //self.collectionView.reloadData()
        cell.menuItems = allItems[selectedCategory]!
        cell.categoryItems = allItems[selectedCategory]!
        cell.isExpanded = !cell.isExpanded
        self.itemsArray = allItems[selectedCategory]!
        self.tableView.beginUpdates()
        self.tableView.endUpdates()




        

我尝试了很多东西,我尝试在数组中添加项目并返回计数(不显示任何内容)。我有一本包含必要项目的字典,所以我也尝试返回 allItems[selectedCategory]?.count 并且这总是返回错误,我相信 selectedCategory 一旦被调用就没有任何价值。

【问题讨论】:

能否请您也出示您的代码? @Victor 我已经添加了我的代码,提前谢谢你。 【参考方案1】:

在 beginUpdate() 和 endUpdate() 之间使用适当的操作创建集合视图项的 for 循环

【讨论】:

以上是关于更新集合视图项的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationBar 直到表格视图更新后才更新栏按钮项

Xamarin 表单集合视图 ItemsSource 绑定未更新 UI

使用 Linq 一次更新可观察集合项的两个字段

NSFetchedResultsController 更改更新 - 集合视图

iOS 8 GM 不更新集合视图的约束

SwiftUI:如何在另一个视图中更新传递的数组项