为什么我不能将值发送到另一个 ViewController 上的 UILabel?
Why can't I send a value to a UILabel on another ViewController?
我只是想通过 segue 将文本发送到另一个 ViewController 上的 UILabel:
let controller = segue.destinationViewController as! DetailViewViewController
controller.detailViewLabel.text = "Hello!"
但是执行segue时,每次detailViewLabel
都是nil
。
但是,如果将字符串发送到类型为 string
的新变量,然后将 detailViewLabel.text
分配给 viewDidLoad
中的新字符串,它就可以正常工作。
例如,这很好用:
var detailViewLabelText: String!
@IBOutlet weak var detailViewLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
detailViewLabel.text = detailViewLabelText
// Do any additional setup after loading the view.
}
为什么我不能通过segue直接将字符串发送到UILabel
的text
属性?
在第一次加载视图之前,视图控制器中的插座不会连接。当第一次访问 UIViewController 的 view
属性 时加载视图。
因此,如果您在尝试设置标签上的文本之前强制加载视图,您的代码应该可以工作,例如
let controller = segue.destinationViewController as! DetailViewViewController
let _ = controller.view
controller.detailViewLabel.text = "Hello!"
您也可以只初始化要发送到 class 之外的字符串,然后它对所有 class 都可用。这不是很专业,但确实有效:)
我做了一些类似于 Daniel Hall 的事情,但我将数据设置为一个变量,然后在加载视图后,我将 label.text 设置为该变量。
我只是想通过 segue 将文本发送到另一个 ViewController 上的 UILabel:
let controller = segue.destinationViewController as! DetailViewViewController
controller.detailViewLabel.text = "Hello!"
但是执行segue时,每次detailViewLabel
都是nil
。
但是,如果将字符串发送到类型为 string
的新变量,然后将 detailViewLabel.text
分配给 viewDidLoad
中的新字符串,它就可以正常工作。
例如,这很好用:
var detailViewLabelText: String!
@IBOutlet weak var detailViewLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
detailViewLabel.text = detailViewLabelText
// Do any additional setup after loading the view.
}
为什么我不能通过segue直接将字符串发送到UILabel
的text
属性?
在第一次加载视图之前,视图控制器中的插座不会连接。当第一次访问 UIViewController 的 view
属性 时加载视图。
因此,如果您在尝试设置标签上的文本之前强制加载视图,您的代码应该可以工作,例如
let controller = segue.destinationViewController as! DetailViewViewController
let _ = controller.view
controller.detailViewLabel.text = "Hello!"
您也可以只初始化要发送到 class 之外的字符串,然后它对所有 class 都可用。这不是很专业,但确实有效:)
我做了一些类似于 Daniel Hall 的事情,但我将数据设置为一个变量,然后在加载视图后,我将 label.text 设置为该变量。