我正在使用自定义.xib视图,该视图在stackView中可重复使用,具体取决于数组包含的条目数量:
不实际,只是示例数组:
let array = [“第一”,“第二”,“第三”]
for i in 1...array.count
{
let view = MyCustomView()
view.label.text = array[i-1]
stackView.addArrangedSubview(view)
}
以后通过功能为每个不同的视图更改label.text的最佳方法是什么?
我可以将顶部的视图声明为:
let view1 = MyCustomView()
let view2 = MyCustomView()
let view3 = MyCustomView()
...
但是随后我将不得不声明很多我可能不会使用的视图,只是为了确保有足够的计数并能够更改标签。
是否有快速的方法或字典样式声明view [1]等?
答案 0 :(得分:0)
您可以创建一个[MyCustomView]
类型的空数组。创建它们时,将新的MyCustomView
附加到此数组中。
声明为:
let array = ["first", "second", "third"]
var myCustomViews = [MyCustomView]()
并在创建新MyCustomView
时附加它们:
for i in 0..<array.count {
let view = MyCustomView()
myCustomViews.append(view)
view.label.text = array[i]
stackView.addArrangedSubview(view)
}
以后,您可以按以下方式访问它们:
myCustomViews[1].text = "New text"
答案 1 :(得分:0)
您可以直接从堆栈视图访问视图,因为它们按照您添加视图的顺序进行保存,因此您不需要为它们或数组提供一些其他属性。
stackView.arrangedSubviews
设置标签的一种方法是遍历arrangedSubviews
数组
for (index, view) in stackView.arrangedSubviews.enumerated() {
if let myView = view as? MyCustomView {
myView.label.text = array[index]
}
}
,或者如果您知道索引,则单独
if let view = stackView.arrangedSubviews[i] as? MyCustomView {
view.label.text = array[i]
}
在两种情况下,您都需要进行一些验证,以验证索引值没有超出范围。