【问题标题】:How to incorporate multiple collection views in one view controller?如何在一个视图控制器中合并多个集合视图?
【发布时间】:2015-05-03 14:08:50
【问题描述】:

我正在尝试使用 UICollectionViews 获得七个水平滚动按钮栏。启动并运行一个按钮栏没有问题,但是当我使用多个集合视图时遇到应用程序崩溃错误。有人知道如何在 Swift 中实现这一点或知道任何教程吗?我的第一个 Collection View 的代码在这里:

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

    var tableImages: [String] = ["1.png", "2.png", "3.png", "4.png", "5.png", "6.png"]

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return tableImages.count
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell:CollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell
        cell.expansionCell.image = UIImage(named: tableImages[indexPath.row])
        return cell
    }

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        println("cell \(indexPath.row) selected")
    }
}

请帮忙!

【问题讨论】:

  • 您遇到了什么错误?在哪条线上?
  • 有很多教程把UICollectionView放在UITableViewCell中,所以制作一个包含UICollectionView的UITableView,在UITableView中可以得到多个UICollectionView,ashfurrow.com/blog/…
  • 我收到线程 1 信号 SIGABRT。
  • 您在哪一行收到该错误?
  • 从这里开始:developer.apple.com/library/ios/recipes/…。这是一个没有错误解释的非问题。

标签: ios iphone swift uicollectionview


【解决方案1】:

要分离逻辑,您可以创建 3 个数据源对象来填充集合视图。每个数据源都可以处理其集合视图的所有单元逻辑。这将使您的视图控制器不那么混乱,因为您所要做的就是将它们全部分配到viewDidLoad。您需要保留对数据源对象的引用,因为 collectionView.dataSource 不会。

var collectionViewA: UICollectionView!
var dataSourceA: DataSourceA!
var collectionViewB: UICollectionView!
var dataSourceB: DataSourceB!
var collectionViewC: UICollectionView!
var dataSourceC: DataSourceC!

override func viewDidLoad() {
    super.viewDidLoad()
    self.dataSourceA = DataSourceA()
    self.collectionViewA.dataSource = self.dataSourceA
    // repeat for dataSource/collectionView B and C
}

【讨论】:

  • 很好的建议,但几乎可以肯定与 OP 的问题无关。
  • 这是我的赞成票,但您的评论混淆了原本很好的建议。它的设计很好,可以为数据源提供单独的实例(甚至类),但它们的执行是在主线程上序列化的。不确定“资源崩溃”是什么意思?代码引发的无数问题中有哪些?从我所见,看起来 OP 将有三个集合呈现相同的图像集。您的 - 仍然很好 - 原始建议将为 OP 节省他/她区分视图所需的条件逻辑。
【解决方案2】:

这就是我处理案件的方式。希望对你有帮助。

分店:

@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var SecondCollectioView: UICollectionView!

方法:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "customCell", for: indexPath) as UICollectionViewCell

    if(collectionView == self.SecondCollectioView) {
        cell.backgroundColor = UIColor.black
    } else {
         cell.backgroundColor = self.randomColor()
    }

    return cell;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多