如何在swift3中的UICollectionView中显示两个不同的单元格

时间:2017-07-16 19:16:18

标签: ios swift uicollectionview

我试图通过使用UICollectionViewCell来实现以下图像。 Sample Image

但我有3个不同的案例: A)特定类型的旅程只有前进的旅程时间是可见的。 B)可以看到特定类型的旅程,包括往返旅程和返程旅程(如下图所示)。 C)特定类型的旅程有2个往返旅程和2个返程时间。

所以我正在尝试使用集合视图。我是否正确使用此方法以及如何使用集合视图实现此逻辑?

1 个答案:

答案 0 :(得分:3)

我可能会将我的UICollectionViewCell子类化,定义所有必需的布局类型枚举,并将其作为自定义方法中的参数传递给我的cellForItemAtIndexPath,因此自定义集合视图单元知道如何自行布局。

这样的事情:

enum MyLayoutType
{
    case layoutA
    case layoutB
    case layoutC
}

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource
{
    override func viewDidLoad()
    {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }

// MARK: Collection View DataSource

    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int
    {
        return 1
    }

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

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

        // Decide here what layout type you would like to set

        cell.setUpWithType(layoutType: .layoutA)
        return cell
    }
}

然后,在自定义集合视图单元子类中(不要忘记在界面构建器文件中分配Custom类):

class MyCustomCVCell: UICollectionViewCell
{
    func setUpWithType(layoutType: MyLayoutType)
    {
        switch layoutType
        {
        case .layoutA:
            self.backgroundColor = .red
        case .layoutB:
            self.backgroundColor = .yellow
        case .layoutC:
            self.backgroundColor = .blue
        }
    }
}