为什么我不能将值发送到另一个 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直接将字符串发送到UILabeltext 属性?

在第一次加载视图之前,视图控制器中的插座不会连接。当第一次访问 UIViewController 的 view 属性 时加载视图。

因此,如果您在尝试设置标签上的文本之前强制加载视图,您的代码应该可以工作,例如

let controller = segue.destinationViewController as! DetailViewViewController
let _ = controller.view
controller.detailViewLabel.text = "Hello!"

您也可以只初始化要发送到 class 之外的字符串,然后它对所有 class 都可用。这不是很专业,但确实有效:)

我做了一些类似于 Daniel Hall 的事情,但我将数据设置为一个变量,然后在加载视图后,我将 label.text 设置为该变量。