ios - 在按钮单击时修改生成的 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 被回答,则只有该图像视图会改变,而其余的保持不变。
希望这个解释有任何意义,任何输入将不胜感激,谢谢。
解决方案
看到你做错了几件事。
您已将
UIImageView
其作为实例变量,如下所示,因此在创建所有图像后,它持有对 last 的引用imageView
。var imageView = UIImageView()
将
var imageView
as 局部变量设为局部变量,并使用其标记值func changeImage()
获取正确imageView
的值,然后尝试更改其图像。
如果有任何疑问请评论。
如何imageView
返回changeImage()
检查下面的代码。
let tag = 888 + (questionNumber - 1)
if let imageView = view.viewWithTag(tag) as? UIImageView {
// Change imageView's image here
}
推荐阅读
- python - stream tweets with tweepy and Arabic characters problem
- python - fit_generator() doesn't works in Spyder
- cordova - cordova-plugin-facebook4 安装问题
- r - ggplot2: geom_bar(); 如何交替填充顺序以使条形图不会丢失在具有更高值的条形图中?
- deep-learning - LSTM 模型中的时间步长到底是什么?
- android - Android 对话框弹出
- wordpress - 通过插件捕获所有 WordPress 事件
- android - SpannableStringBuilder.insert() 如果目标中已经存在该类型的跨度,则不会插入跨度
- pytest - API python module and pytest: real tests need private data to login, how to handle (no mocking)
- usb - Allen Bradley Connected Components RS Linx USB 连接