我有一个UIStackView对象,我已将UILabel添加为第一个子视图。这是我的代码:
func createStackView() -> UIStackView? {
var displayLabel = UILabel()
// Set properties of displayLabel
...
let myStackView = UIStackView(arrangedSubviews: [displayLabel, stackViewRow1, stackViewRow2]
return myStackView
}
现在,我希望稍后获得对displayLabel对象的引用,以便我可以修改它的文本字段。 我能做到这一点的唯一方法就是黑客攻击:
var displayPanel = topStackView.arrangedSubviews[0]
if let displayLabel = displayPanel as? UILabel {
displayLabel.text = "Ready"
}
有更好的方法吗?
答案 0 :(得分:1)
如果displayLabel
应该不是实例变量,那么为其设置tag值可能会有用:
一个整数,可用于标识您的视图对象 应用
你能做什么:
// declaring a global constant for holding the label tag value
let displayLabelTageValue = 101
func createStackView() -> UIStackView? {
var displayLabel = UILabel()
// setting tag
displayLabel.tag = displayLabelTageValue
// Set properties of displayLabel
...
let myStackView = UIStackView(arrangedSubviews: [displayLabel, stackViewRow1, stackViewRow2]
return myStackView
}
用于识别displayLabel
标签:
if let displayLabel = view.viewWithTag(displayLabelTageValue) as? UILabel {
// displayLabel is wanted label!
} else {
// make sure that the tag value is matched
}
答案 1 :(得分:1)
在属性中存储对标签的引用:
var displayLabel: UILabel?
// then when you create the stack view
self.displayLabel = displayLabel
// to access it later
if let displayLabel = displayLabel {
displayLabel.text = "Ready"
}
答案 2 :(得分:0)
这取决于你的目标。
如果要将堆栈视图位置0的视图文本设置为特定字符串,则发布的代码是正确的方法。
如果您有一个标签,您希望能够更改它而不管它在堆栈视图中的位置,那么您应该在视图控制器的实例变量中保存对它的引用,然后您可以设置它可以随时发送到新字符串。