集合视图,数组和字典

时间:2015-02-06 05:13:00

标签: ios arrays swift dictionary collectionview

试图了解集合视图,数组和字典。我有一个名为CollectionViewCell的类,它包含一个UIImageView插座,我希望从数组中填充图像。问题是我有不同的内容,不同的内容,所以我创建了多个存储图像的数组。使用当前代码,我得到一个错误,说数组索引超出范围。我是否需要使用字典来填充不同的部分,而字典将信息与键和值分开?

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

    // Configure the cell

    cell.imageView.image = green[indexPath.row]
    cell.imageView.image = blue[indexPath.row]

    return cell

如何使用从数组中填充的标题命名不同的部分? names是我的字符串数组,HeaderView是一个包含空标签的类。使用此代码时也出错。

override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

   switch kind {
    case UICollectionElementKindSectionHeader:
        let headerView =
        collectionView.dequeueReusableSupplementaryViewOfKind(kind,
            withReuseIdentifier: "HeaderView",
            forIndexPath: indexPath)
            as HeaderView
        headerView.label.text = names[indexPath.row]
        return headerView
    default:
        assert(false, "Unexpected element kind")
    }
}

[编辑] 部分代码中的部分数量和项目数:

    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    //Return the number of sections
    return 2
}


override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    //Return the number of items in the section
    return green.count
}

因此,如果蓝色部分中的项目数量与绿色部分不同,那么我是否还要在numberOfItemsInSection函数中包含return blue.count?

2 个答案:

答案 0 :(得分:0)

由于greenblue应该填充不同的部分,因此您需要根据部分有条件地使用其中一个,例如:

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    //Return the number of items in the section
    if section == 0 {
        return green.count
    } else {
        return blue.count
    }
}

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

    // Configure the cell

    if indexPath.section == 0 {
        cell.imageView.image = green[indexPath.row]
    } else {
        cell.imageView.image = blue[indexPath.row]
    }

    return cell
}

在您当前的代码中,如果blue的数组比green短,则可以得到您所描述的错误,因为numberOfItemsInSection超出了blue&#39 ;索引。

答案 1 :(得分:0)

indexPath对象不仅封装了有关行的信息,还封装了有关该部分的信息。因此,如果您指的是第一部分中的第一个元素,indexPath.row将为0而indexPath.section将为0.如果您指的是第二部分中的第三个元素,{{1将是2,indexPath.row将是1 ......依此类推。在这种情况下,您将如何定义indexPath.sectioncellForRowAtIndexPath方法?这是代码:

numberOfItems