首页 > 解决方案 > 在按钮单击时修改生成的 imageViews 的图像

问题描述

我正在创建一个测验应用程序,并且无法更改在 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 被回答,则只有该图像视图会改变,而其余的保持不变。

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

标签: iosswiftfor-loopimageview

解决方案


看到你做错了几件事。

  1. 您已将UIImageView其作为实例变量,如下所示,因此在创建所有图像后,它持有对 last 的引用 imageView

    var imageView = UIImageView()

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

如果有任何疑问请评论。

如何imageView返回changeImage()检查下面的代码。

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

推荐阅读