单击按钮修改生成的imageViews的图像

时间:2018-08-03 09:48:35

标签: ios swift for-loop imageview

我正在创建测验应用程序,并且无法更改在for循环中生成的特定imageview的显示图像。

以下代码负责根据特定测验中的问题数量生成图像视图。在viewDidLoad()方法中调用它:

var imageView = UIImageView()

func addProgressImages(to view: UIView, count: Int){
    let screenSize = UIScreen.main.bounds.size

    for i in 0..<count {
        let spacing: CGFloat = 2
        let tag = i + 888
        let width: CGFloat = screenSize.width/CGFloat(count)
        let height: CGFloat = width
        if let view = view.viewWithTag(tag){
            view.removeFromSuperview()
        }
        let x = spacing + CGFloat(i) * width
        imageView = UIImageView(frame: CGRect(x: x, y: 100, width: width - spacing, height: height))
        imageView.image = UIImage(named: "question_progress_empty")
        imageView.tag = tag
        imageView.contentMode = .scaleAspectFit
        view.addSubview(imageView)
        //print("imageviews displaying")
    }
}

当用户使用if语句选择该问题的答案时,我试图将某些图像更改为另一图像:

    func changeImage() {
    if (optA != questionAns){
    imageView.image = UIImage(named: "wrong_answer")
        print("opta")
    }else if(optB == questionAns){
        imageView.image = UIImage(named: "wrong_answer")
        print("optb")
    }else if(optC == questionAns){
        print("optc")
        imageView.image = UIImage(named: "wrong_answer")
    }else{
        print("if statement not initialised")
    }
}

https://imgur.com/a/zwJ4EVn-这是上面代码的输出 当前,当用户单击按钮时,仅最后一张图像将被更改。

我需要修改与特定问题相关的imageview的帮助,例如如果回答了问题2,则只有imageview会改变,而其余的则保持不变。

希望这种解释是有意义的,任何输入将不胜感激, 谢谢。

2 个答案:

答案 0 :(得分:0)

看到你做错了几件事。

  1. 您已将UIImageView用作实例变量,如下所示,因此在 创建所有图像,其中包含对最后一个图像的引用 imageView

    var imageView = UIImageView()

  2. var imageView用作局部变量,并在func changeImage()中使用其标记值获取正确的imageView,然后 尝试更改其图像。

如有任何疑问,请发表评论。

如何在imageView的下面的代码中重新获得changeImage()

let tag = 888 + (questionNumber - 1)
if let imageView = view.viewWithTag(tag) as? UIImageView {
   // Change imageView's image here
}

答案 1 :(得分:0)

您可能要创建一个图像视图数组:

var imageViews = [UIImageView]()

并将您的UIImagesViews添加到循环中的该数组中:

for i in 0..<count {
    var imageView = UIImageView()
    // additional setup...
    imageViews.append(imageView)
}

然后,您以后可以遍历数组并更改图像:

for imageView in imageViews {
    imageView.image = UIImage(named: "wrong_answer")
    // etc.
}