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子类(正如我通常那样),结果是正确的。