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

时间:2014-08-03 19:33:36

标签: ios swift uicollectionview xcode6

这个冗长的标题大致是我的问题。我在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)返回标签,我可以设置其值。

Example code result after scrolling

有趣的是,我在Objective-C中放了类似的例子,没有这样的问题。即使使用XCode6 beta4构建和运行。

我想知道我是否错过了某些内容或这是错误的行为?

更新:显然我采取了过于简单的做法。当我创建自定义UICollectionViewCell子类(我通常这样做)时,结果是正确的。

0 个答案:

没有答案