UICollectionViewCell中的viewWithTag在Swift中返回nil(直到单元格被重用)

这个冗长的标题大致是我的问题。 我开始在Swift项目中使用UICollectionView进行简单的学习示例。

我添加了CollectionView到由模板创build的ViewController,分配了委托和数据源。 自定义单元格是在故事板中创build的。 重用标识符已设置。

一切都很好。 我已经在自定义单元格中放置了一个UILabel,并给了标签值100。

这是我的ViewController的代码: https : //gist.github.com/tomekc/becfdf6601ba64d5fd5d

有趣的exceprt如下:

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("element", forIndexPath: indexPath) as UICollectionViewCell cell.backgroundColor = UIColor.yellowColor() // list subviews NSLog("--- ROW %d ---", indexPath.row) printSubviews(cell) if let labelka = cell.viewWithTag(100) as? UILabel { labelka.text = String(format: "Row %d", indexPath.row) NSLog("Found label") } return cell } func printSubviews(view:UIView) { if let list = view.subviews as? [UIView] { for uiv in list { NSLog("%@ tag:%d", uiv, uiv.tag) printSubviews(uiv) } } } 

问题是cell.viewWithTag(100)返回零直到单元格被重用 。 当我滚动视图,所以任何单元格出窗口和重用是强制的, viewWithTag(100)返回标签,我可以设置它的值。

滚动后的代码结果示例

有趣的是,我在Objective-C中join了类似的例子,并没有这样的问题。 即使在使用XCode6 beta4编译和运行时也是如此。

我想知道我错过了什么,或者这是错误的行为?

更新:显然我采取了太简单的方法。 当我创build自定义的UICollectionViewCell子类(正如我通常那样),结果是正确的。