初始化viewcontroller时传递变量

时间:2016-02-26 19:10:15

标签: ios variables uiviewcontroller

点击按钮时,我有一个方法运行:

   let tempVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("AwardViewController") as! AwardViewController
   tempVC.currentDocumentPartTitle = currentDocumentPart.title

这是AwardViewController类,

class AwardViewController: UIViewController {
    @IBOutlet weak var textView: UITextView!
    var currentDocumentPartTitle: String!

 override func awakeFromNib() {
        super.awakeFromNib()
     //assigning text to UITextView in awakeFromNib method
     //In order to find right textfile, currentDocumentPartTitle is used to search right data in plist.
}

问题在于,即使我传递变量,它也会在awakeFromNib方法中返回nil值错误,表示currentDocumentPartTitle为零。如何在调用awakeFromNib之前传递变量?

2 个答案:

答案 0 :(得分:1)

这是因为awakeFromNib()在视图的属性可分配之前执行。请参阅https://stackoverflow.com/a/377390/1214800

为什么不在viewDidLoad()内完成您需要做的事情?

override func viewDidLoad() {
    super.viewDidLoad()
    print(currentDocumentPartTitle!) // works!
}

答案 1 :(得分:0)

您应该放置复制属性值的代码,并将其显示在目标视图控制器的viewWillAppear:animated:方法的UI中。

因此,对于您的AwardViewController课程,请向viewWillAppear:animated:添加代码,以便将currentDocumentPartTitle的值安装到您的用户界面中。

顺便说一句,在代码的第一部分中,您将显示创建视图控制器并设置tempVC.currentDocumentPartTitle的值,但是您不显示任何代码来显示新的视图控制器。你是以模态方式呈现的吗?