在UICollectionView中引用UIImageView / UILabel

时间:2018-08-07 19:16:54

标签: ios swift swift4

是否有一种优雅的方式引用嵌套在UIImageView中的UILabel(或UICollectionView)? (例如,使用.表示法)

也就是说,如果不将UICollectionViewCell布尔板子类化,则仅 用于创建@IBOutlet。 例如,在SO线程here

很好看例子。

3 个答案:

答案 0 :(得分:0)

没有子类UICollectionViewCell的话,没有一种优雅的方法。

可以无需子类化即可完成此操作-通过以编程方式添加UIImageView,然后在需要时找到它(以某种方式)-但这非常像iOS的反模式。 (但这仍然不允许您使用点符号,因为子视图不是UICollectionViewCell的属性)

答案 1 :(得分:0)

您不能直接使用点符号。但是您可以在情节提要中为图像UIImageView分配一些标签。像这里的123。并使用该标签进行访问。

if let imageView = cell.viewWithTag(123) as? UIImageView {
   //  imageView.image = some image 
}

我不确定这是否是一个好模式。但是您仍然可以摆脱UICollectionViewCell样板。

答案 2 :(得分:0)

实际上,有一种方法可以实现此目的(使用“ tag”属性)(我不会说这是“优雅”的,我会注意到您通常不应该这样做)查看:

  

一个整数,可用于标识您的视图对象   应用。


请考虑您具有以下单元格:

enter image description here

您可以做的是选择图像视图/标签,然后从界面构建中转到属性检查器并设置其标签:

enter image description here

因此,无需创建UICollectionViewCell自定义类,您在cellForItemAt中应该做的就是根据视图的标记值来投射视图:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)

    let imageView = cell.viewWithTag(101) as! UIImageView
    let label = cell.viewWithTag(102) as! UILabel

    // ...
}

很显然,在这一点上,请记住,viewWithTag 的给定标记值必须与接口构建器以及子类型转换设置的值匹配,否则它将崩溃