试图了解集合视图,数组和字典。我有一个名为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?
答案 0 :(得分:0)
由于green
和blue
应该填充不同的部分,因此您需要根据部分有条件地使用其中一个,例如:
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.section
和cellForRowAtIndexPath
方法?这是代码:
numberOfItems