在 Swift 中更改 UICollectionView 的数据源

Posted

技术标签:

【中文标题】在 Swift 中更改 UICollectionView 的数据源【英文标题】:Changing the DataSource of UICollectionView in Swift 【发布时间】:2015-07-13 10:11:48 【问题描述】:

我正在设计一个 UICollectionView 来显示我的数据库中的所有产品。当用户打开 collectionView 时,他们会在自定义 CollectionViewCell 中显示从我的 [Product] 数组填充的所有产品。

我的 Product 类有一个 category 属性,我希望用户能够点击该属性,然后重新加载显示类别列表的 collectionView 供用户过滤数据。类似于 ios Photos 应用程序以按相册查看照片,但最好是在所有照片上启动。

有没有办法在不实现第二个 CollectionViewController 的情况下做到这一点?

【问题讨论】:

你试过改变collection view的数据源吗? 我该怎么做?因为我的 dataSource 是我的 [Product] 数组,它设置了行和单元格值,所以我无法将数组的类型更改为我的类别。有没有办法将 dataSource 和其他所有内容设置为不同的值? 【参考方案1】:

是的,您可以通过添加一些指示器来实现它,当用户键入类别按钮时您将更改这些指示器,例如 bool 变量:

var showCategory = false

并且在每个数据源/委托方法中你需要检查条件,例如:

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int 
    if (showCategory) 
        return 10 // your logic to display data for categories
     else 
        return 15 // your logic to display data for non categories
    
  


  override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    if (showCategory) 
        return 10 // your logic to display data for categories
     else 
        return 15 // your logic to display data for non categories
    
  

  override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! UICollectionViewCell

    // Configure the cell
    if (showCategory) 
        // your logic to display data for categories
     else 
        // your logic to display data for non categories
    
    return cell
  

请记住,当您要显示类别时,您应该更改数据源,将 showCategory 变量设置为 true 并调用 reload data 方法。

如果您有更多数据源/委托方法,您也应该添加条件。

【讨论】:

谢谢格雷格。不知道为什么我从来没想过这么简单的解决方案【参考方案2】:

按照 Arsian Asim 的建议,更改集合视图的数据源,然后在 CollectionView 上调用 reloadData

【讨论】:

以上是关于在 Swift 中更改 UICollectionView 的数据源的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中动态更改 UICollectionView 单元格高度

我需要创建一个UIImages数组,我从Swift中的Camera roll加载

集合视图更改单元格大小

tvOS:如何处理 TabBar 和 UICollectionView 之间的焦点更改并防止崩溃

如何使用部分在CollectionView中水平居中行

在 Swift 中点击 Pagecontrol 时更改页面