问题描述
如何用字符串替换UIImageview的名称
name\(number).isHidden = false
不起作用
name1.isHidden = false
感谢于尔根
解决方法
您不能那样做。 Swift是一种编译语言,而不是脚本语言。
“ name1”在源代码中仅存在 。
如果确实需要使用对象(无论是图像视图还是其他UI元素),以便可以“按名称”引用它们,那么最好的选择就是创建字典。
假设您已在Storyboard中添加了图像视图,并通过@IBOutlet
将它们连接起来,例如:
@IBOutlet var name1: UIImageView!
@IBOutlet var name2: UIImageView!
@IBOutlet var name3: UIImageView!
@IBOutlet var name4: UIImageView!
您可以像这样在viewDidLoad()
中创建字典:
class TestViewController: UIViewController {
@IBOutlet var name1: UIImageView!
@IBOutlet var name2: UIImageView!
@IBOutlet var name3: UIImageView!
@IBOutlet var name4: UIImageView!
var imageViews: [String : UIImageView] = [:]
override func viewDidLoad() {
super.viewDidLoad()
imageViews["name1"] = name1
imageViews["name2"] = name2
imageViews["name3"] = name3
imageViews["name4"] = name4
}
}
然后,您可以“按名称”获得对图像视图的引用:
let i = 3
// make sure we get a valid reference
if let imgView = imageViews["name\(i)"] {
imgView.isHidden = false
}
由于许多原因,这不是一个好方法。
一种更好的方法是将它们连接到@IBOutlet
集合:
@IBOutlet var imageViews: [UIImageView]!
将所有图像视图都连接到该@IBOutlet
...然后在运行时,您可以像以下一样容易地获得引用:
imageViews[number].isHidden = false