为什么我无法访问我的子视图的方法?

时间:2015-04-19 07:21:14

标签: ios swift

在我的ViewDidLoad中:

    let spiralDimension = CGFloat(ScreenWidth! * 0.10)
    let spiralName = "spiral.png"
    let spiralImage = UIImage(named: spiralName)

    spiralView = UIImageView(image: spiralImage!)
    spiralView!.frame = CGRect(x: ScreenWidth! / 2 - spiralDimension/2, y: (ScreenHeight!-TabBarHeight!) / 2 - spiralDimension/2 , width: spiralDimension, height: spiralDimension)
    spiralView!.tintColor = UIColor.redColor()
    self.view.addSubview(spiralView!) //works!!!

某个地方......

func fadeBackground(){
    UIView.animateWithDuration(self.fadeTime, delay: 0, options: UIViewAnimationOptions.AllowUserInteraction, animations: {
        var randomIndex = Int(arc4random_uniform(UInt32(CONSTANTS.MainColorScheme.count)))

        var subviews = self.view.subviews
        for v in subviews{
            if v.isKindOfClass(UIImageView){
                println(v) //correctly prints my spiral!
                v.tintColor = CONSTANTS.MainColorScheme[randomIndex] //can't do it. XCode won't even auto-complete
            }
        }
    }) { (stuff Bool) -> Void in

    }
}

我不能assign tintColor to v,即使它正确打印我的课程。无法成功构建。

2 个答案:

答案 0 :(得分:2)

subviews返回AnyObject数组。因此,您需要投放v才能设置tintColor

尝试:

for v in subviews{
   if let v = v as? UIImageView {
      println(v)
      v.tintColor = CONSTANTS.MainColorScheme[randomIndex]
   }
}

答案 1 :(得分:1)

你必须对它进行类型转换。

if v.isKindOfClass(UIImageView){
  let iv = v as! UIImageView
  v.tintColor = ...

问题在于,subviews属性在iOS中定义为[AnyObject]类型的变量,因此Swift不知道您的子视图是UIView的成员,它具有该属性tintColor