选择时无法在集合视图中获取单元格引用

时间:2016-01-18 22:14:52

标签: ios swift uicollectionview uicollectionviewcell

我的简单集合视图存在问题:委托中的 didSelectItemAtIndexPath 我无法获得对单元格的正确引用。这是我的代码:

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

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

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CategorySelectionCVCell
    cell.titleLabel.text = categories[indexPath.row]["name"] as? String
    cell.backgroundColor = ConversionUtilities.getUIColorFrom(categories[indexPath.row]["color"] as! String)
    return cell
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath)
{
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CategorySelectionCVCell
    print("Cell with title: \(cell.titleLabel.text) and background color: \(cell.backgroundColor)")
    collectionView.reloadData()
}

当我选择一个单元格时,我总是得到:

  

带标题的单元格:可选(“标签”)和背景颜色:nil

而且我不知道为什么,就像cellForItemAtIndexPath无法正常工作,但cellForItemAtIndexPath中的相同印刷品给了我:

  

带标题的单元格:可选(“水果”)和背景颜色:   可选(UIDeviceRGBColorSpace 1 1 0 1)

...是的,单元格标识符是“单元格”,我也在故事板中正确设置。此外,UICollectionViewDataSourceUICollectionViewDelegate也在IB中正确链接。

任何帮助?

1 个答案:

答案 0 :(得分:2)

当你致电let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CategorySelectionCVCell 方法时,即

let cell = collectionView!.cellForItemAtIndexPath(indexPath) as! CategorySelectionCVCell

你得到一个准备好重复使用的空单元格,而不是当前在集合视图中的单元格。

虽然您可以通过调用

从集合视图中获取单元格
let labelText = categories[indexPath.row]["name"] as? String

如果你需要的只是标签上的文字,最好直接进入模型,即

import java.util.HashSet;
import java.util.Set;
public class Intersection
{
   public static void main(String[] args)
   {
      Set<String> s1 = new HashSet<String>();
      Set<String> s2 = new HashSet<String>();

      s1.add("a");
      s1.add("c");

      s2.add("b");
      s2.add("c");

      s1.retainAll(s2);

      System.out.println(s1);
   }
}