查找和修改子视图时遇到的困难

时间:2016-03-27 16:07:46

标签: swift uiview uiimageview subviews

我在获取对子视图的引用时遇到了一些困难。 基本上我有一个包含自定义UIViews集合的UIView。 我需要的是获得一个特定视图的引用来修改它。

我尝试了两种不同的方法,其中第一种方法是概念:

for i in 1...8 {
    let myCustomView = MyCustomView(frame: CGRect(0, 0, 100, 100)) // frame is with fake numbers just to write the snippet
    myCustomView.customProperty = some property
    myCustomView.image = some UIImage
    myCustomView.tag = i

    addSubview(myCustomView)
}

我试图通过这种方式获得引用标记2的视图:

if let viewWithTag = self.viewWithTag(2) as! MyCustomView {
    viewWithTag.image = a different Image
}

我可以看到viewWithTag不是nil但是对于我改变的任何属性,应用程序中都没有反映出来。

访问子视图的另一种方法是:

let myViews = self.subviews.filter({$0 is MyCustomView})
let specificView = myViews[1] as! MyCustomView

specificView.image = something else

在这种情况下,我的myViews包含所有子视图,specificView包含特定视图,但同样没有任何内容反映在应用程序中

注意,MyCustomView的类型为UIImageView,主容器是UIView

我的方法是否正确?

提前致谢

1 个答案:

答案 0 :(得分:0)

您可能需要轻推图像视图,以确保它需要更新。

设置图像后,尝试执行以下操作:

viewWithTag.setNeedsDisplay()

另外,考虑使用标签之外的其他内容来区分自定义图像视图(比如名称的字符串属性怎么样?),因为标签中使用的通用整数并不能真正告诉您它们的用途是什么。