这个冗长的标题大致是我的问题。我在Swift项目中使用UICollectionView开始了简单的学习示例。
我将CollectionView添加到由模板创建的ViewController,分配了委托和数据源。自定义单元格在故事板中创建。设置了重用标识符。
到目前为止,一切都很好。我在自定义单元格中放置了一个UILabel,并给出了标记值100。
我的ViewController的代码:https://gist.github.com/tomekc/becfdf6601ba64d5fd5d
下面有趣的是:
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)
返回nil ,直到重复使用单元格。当我滚动视图以使任何单元格离开窗口并强制重用时,viewWithTag(100)
返回标签,我可以设置其值。
有趣的是,我在Objective-C中放了类似的例子,没有这样的问题。即使使用XCode6 beta4构建和运行。
我想知道我是否错过了某些内容或这是错误的行为?
更新:显然我采取了过于简单的做法。当我创建自定义UICollectionViewCell子类(我通常这样做)时,结果是正确的。