Swift Custom UIViewController的标签是零

时间:2015-09-06 10:22:59

标签: ios swift

我使用xib自定义了一个viewcontroller,这个viewcontroller有一个标签。

我已将标签与xib连接。

但是当我使用这个标签时,它是零。

我做错了什么?

下面是我的代码。

import UIKit

class MyViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

使用此viewcontroller的代码

    let myViewController = MyViewController(nibName: "MyViewController", bundle: nil)
    myViewController.label.text = "test"
    presentViewController(myViewController, animated: true) { () -> Void in
        println("ok")
    }

谢谢。

3 个答案:

答案 0 :(得分:3)

来自the documentation

  

您指定的nib文件不会立即加载。它是在第一次访问视图控制器的视图时加载的。如果要在加载nib文件后执行其他初始化,请覆盖viewDidLoad方法并在那里执行任务。

您可以从viewDidLoad访问标签。如果需要从外部访问标签,请确保首先访问view属性以强制加载视图。

答案 1 :(得分:3)

问题是您在加载标签之前尝试访问标签。

以下更改可能会解决您的问题;

import UIKit

class MyViewController: UIViewController {

    var labelText: String!
    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        //Setting Label text here
        label.text = labelText;
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

let myViewController = MyViewController(nibName: "MyViewController", bundle: nil)
    myViewController.labelText = "test"
    presentViewController(myViewController, animated: true) { () -> Void in
        println("ok")
    }

答案 2 :(得分:0)

未加载视图控制器的视图。您可以在视图控制器中使用viewDidLoad()方法,也可以通过访问view属性来加载它。它是懒惰加载并将加载您的视图。 所以在访问viewController.view.label之前写print(viewController.view)来延迟加载视图