是否有一种优雅的方式引用嵌套在UIImageView
中的UILabel
(或UICollectionView
)? (例如,使用.
表示法)
也就是说,如果不将UICollectionViewCell
布尔板子类化,则仅 用于创建@IBOutlet
。
例如,在SO线程here。
很好看例子。
答案 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
”属性)(我不会说这是“优雅”的,我会注意到您通常不应该这样做)查看:
一个整数,可用于标识您的视图对象 应用。
请考虑您具有以下单元格:
您可以做的是选择图像视图/标签,然后从界面构建中转到属性检查器并设置其标签:
因此,无需创建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
的给定标记值必须与接口构建器以及子类型转换设置的值匹配,否则它将崩溃