为什么我不能在另一个ViewController上向UILabel发送值?

时间:2016-03-18 22:59:17

标签: xcode swift uilabel

我只是想通过segue将文本发送到另一个ViewController上的UILabel:

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

但是当执行segue时,detailViewLabel每次都是nil

但是,如果将字符串发送到string类型的新var,然后将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直接将字符串发送到text的{​​{1}}属性?

3 个答案:

答案 0 :(得分:5)

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

因此,如果在尝试在标签上设置文本之前强制加载视图,则代码应该有效,例如

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

答案 1 :(得分:0)

您也可以初始化您尝试在课堂外发送的字符串,然后它可供所有课程使用。这不是很专业,但它有效:)

答案 2 :(得分:0)

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