ios - 如何在 Swift 中更改 UILabel 的文本属性?
问题描述
我已经以编程方式设置了一个 UILabel,我试图通过稍后在 ViewController 中调用的函数更改文本属性,但是当调用该函数时, questionLabel.text 保持默认值“欢迎”。
基本上我想要完成的是:
func changeLabelText() {
questionLabel.text = "New label text"
print(questionLabel.text!)
}
changeLabelText()
// prints "New label text"
但是我实际上得到的是:
func changeLabelText() {
questionLabel.text = "New label text"
print(questionLabel.text!)
}
changeLabelText()
// prints "Welcome"
这就是我的标签的设置方式:
class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {
@IBOutlet var cameraView: UIView!
var questionLabel: UILabel {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.backgroundColor = .white
label.textColor = .black
label.text = "Welcome"
label.textAlignment = .center
label.frame = CGRect(x: 65, y: 100, width: 300, height: 65)
return label
}
有什么建议么?非常感激!
解决方案
目前的
var questionLabel: UILabel {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.backgroundColor = .white
label.textColor = .black
label.text = "Welcome"
label.textAlignment = .center
label.frame = CGRect(x: 65, y: 100, width: 300, height: 65)
return label
}
是一个计算属性,因此每次访问都会获得一个新的单独实例
questionLabel.text = "New label text" // instance 1
print(questionLabel.text!) // instance 2
相反,您需要一个闭包
var questionLabel: UILabel = {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.backgroundColor = .white
label.textColor = .black
label.text = "Welcome"
label.textAlignment = .center
label.frame = CGRect(x: 65, y: 100, width: 300, height: 65)
return label
}()
推荐阅读
- python - AttributeError:模块“seaborn”没有属性“load_dataset”
- visual-studio - 删除选项卡面板 - Visual Studio 2019
- git - 我可以同时在 Visual Studio Code 中连接我的 GitLab 和 Github 帐户吗?
- firebase - 从 Firebase 管理员为用户订阅 Firebase 云消息传递主题会导致主题参数的语法无效
- querydsl - 在querydsl的orderBy子句中使用列名
- linux - 使用 linux/unix 脚本在 HTML 的特定单词之后获取多个单词
- python - Pandas 删除重复的列
- c# - 为什么 Parallel Foreach 在仅添加 int 值时并不总是返回相同的结果
- postgresql - Windows Server OS 2019 中 PostgreSQL 的 repmgr 的解决方法
- arduino - Arduino“SerialEvent”示例代码在我的 Arduino Nano 上不起作用。我无法接收串行数据。为什么?