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

Modifying images of generated imageViews on button click

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

以下代码负责根据特定测验中的问题数量生成图像视图。在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 - 这是上面代码的输出 目前,只有最后一张图片会在用户单击按钮时发生变化。

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

希望这个解释有意义,任何输入都将不胜感激, 谢谢

看到你做错了几件事。

  1. 您已经将 UIImageView 作为实例变量,如下所示,所以之后 创建所有图像,它持有对最后一个的引用 imageView.

    var imageView = UIImageView()

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

如有疑问请评论。

如何在 changeImage() 中恢复 imageView 检查下面的代码。

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

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

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.
}