根据Swift3中的viewWithTag更改UIView

时间:2016-11-16 05:51:40

标签: swift uiimageview swift3 viewwithtag

在Objective C中,很容易使用强制转换为UIView基于标记更改(UIImageView*)的图像 - 类似于:

[ (UIImageView*) [self.view viewWithTag:n+1] setImage:[UIImage imageNamed:@"bb.png"]];

我一直试图找到一个在Swift 3中做同样事情的最新示例。我终于找到了解决方案 - 你需要使用 作为!< / em> 关键字并可选择转换为UIImageView?。如果你需要这样做 - 这里有一些工作代码:

// SWIFT3 change UIView based on viewWithTag (johnrpenner, toronto)

override func viewDidLoad() 
{
    super.viewDidLoad()

    var n : Int = 0
    for i in stride(from:7, to:-1, by:-1) {
        for j in 0...7 {
            n = i*8+j

            let sqImageView = UIImageView(image: UIImage(named: "wp.png"))
            sqImageView.tag = n+1

            sqImageView.frame.origin.x = (CGFloat(j) * cellX + xStartAdj)
            sqImageView.frame.origin.y = ( (CGFloat(7-i) * cellY) + yStartAdj )

            view.addSubview(sqImageView)
            }
        }
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
//func touchesBegan(touches: Set<UITouch>, with event: UIEvent?)
{
    if let touch = touches.first {
        let touchPos = touch.location(in: self.view)  //swift3
        let touchSQ : Int = coordToSQ(touchPoint:touchPos)

        // change UIView.image based on viewWithTag
        if var findView : UIImageView = view.viewWithTag(touchSQ+1) as! UIImageView? { findView.image = UIImage(named: "bp.png")! }     
    }
}

任何方式 - 花了几个小时来解决这个问题,并且其中的所有内容都是针对Swift 2或Objective C - 认为Swift 3示例可能很有用。

喝彩! 约翰p

2 个答案:

答案 0 :(得分:2)

就像这样。

if let findView = self.view.viewWithTag(touchSQ+1) as? UIImageView {
    findView.image = UIImage(named: "bp.png")
}

答案 1 :(得分:0)

thx nirav - 使用让...作为? UIImageView ..是个很好的答案。

这可能是一个有用的功能:

func setImageView(byTag:Int, toImageNamed:String)
{
    if let findView = self.view.viewWithTag(byTag) as? UIImageView {findView.image = UIImage(named: toImageNamed)}
    return
}