我下载了一组图像并将它们加载到collectionView中。我希望能够将所选的单个项目添加到我在全局声明的数组中,只要我按下单个单元格,然后我就可以循环它们以便稍后从核心数据中删除。这行在项目的顺序打印很好 - 打印(“你选择的单元格#(indexPath.item)!”),但第二次按下另一个单元格添加到数组时,我得到致命错误:索引超出范围错误。我不知道我得到了什么。
var selectedCell: [Int] = [] -> Declared globally
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
// handle tap events
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
print("You selected cell #\(indexPath.item)!")
if self.selectedCell.contains(indexPath.item){
print("Item already added")
} else {
self.selectedCell.append(indexPath.item)
}
if selectedCell.count > 0 {
toolbarButton.title = "Remove Item"
}
// let selectCell:UICollectionViewCell = collectionView.cellForItemAtIndexPath(indexPath)!
// selectCell.contentView.backgroundColor = UIColor.whiteColor()
}
答案 0 :(得分:1)
iOS 9.3,Xcode 7.3
老实说,我认为“致命错误:索引超出范围”不适用于您声明的更简单的整数索引数组,我认为它与集合视图的索引相关联本身。
看起来您符合UICollectionView
的各种协议,即UICollectionViewDataSource, UICollectionViewDelegate
,因为您至少接收到单元格选定方法的回调。
第一件事就是......
title
声明的toolbarButton
属性在哪里,它是UIButton
的自定义子类,因为title
不是标准UIButton
的可设置属性类。这就是您通常设置UIBUtton
...
self.toolbarButton.setTitle("Remove Item", forState: .Normal)
另一件事是,
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell
变量cell
从不在该函数中使用,它应该给你一个警告。
另外,检查数组变量selectedCell
的所有用法,在if语句中检查您未使用的计数值self.selectedCell
。不知道这会做什么,但我认为这会导致你的数组被重新合成,所以每次都会重置计数。
我不理解的其他项目很少,这里是我要使用的代码。请检查您的代码和语法。
以下代码有效:
var selectedCell: [Int] = []
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
{
// handle tap events
print("You selected cell #\(indexPath.item)!")
if (self.selectedCell.contains(indexPath.item))
{
print("Item already added")
}
else
{
self.selectedCell.append(indexPath.item)
}
print("selectedCell.count: \(self.selectedCell.count)")
if (self.selectedCell.count > 0)
{
self.toolbarButton.setTitle("Remove Item", forState: .Normal)
print("selectedCell: \(self.selectedCell)")
}
else
{
//nil
}
}
输出看起来像这样:
注意:当您单击两次相同的单元格时,它不会被添加(在本例中为8),一旦数组中至少有一个项目,则按钮标题会更改。
如果你仍然无法弄明白,那么请看这篇文章,它解释了如何很好地实现集合视图:https://stackoverflow.com/a/31735229/4018041
希望这有帮助!欢呼声。