2016-02-26 40 views
0

我有當按鈕被竊聽的方法運行變量:路過時視圖控制器初始化

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被調用之前傳遞一個變量?

回答

1

發生這種情況是因爲在視圖的屬性可分配之前執行awakeFromNib()。見https://stackoverflow.com/a/377390/1214800

爲什麼不簡單地做viewDidLoad()裏面你需要做的事情?

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

我無法做到這一點,因爲我需要在textView分配給viewcontroller之前對其進行一些配置。對於我的具體情況,它需要在awakeFromNib中完成,這就是爲什麼我很難弄清楚。 – Kahsn

+0

然後你可能不得不寫一個自定義的便利init,我認爲它是在初始化時設置的。那麼,或者重寫什麼是從屬於'awakeFromNib()'(我可以看到這對於基於UIView的組件是必要的,但視圖控制器具有'viewDidLoad()'正是出於這個原因)。 – brandonscript

0

您應該放置複製屬性值並將其顯示到目標視圖控制器的viewWillAppear:animated:方法中的UI中的代碼。

因此,對於您的AwardViewController類,請將代碼添加到您的viewWillAppear:animated:,該代碼將currentDocumentPartTitle的值安裝到您的用戶界面中。

順便說一下,在代碼的第一部分中,您將展示創建視圖控制器並設置tempVC.currentDocumentPartTitle的值,但不顯示任何代碼以顯示新的視圖控制器。你是以模態方式呈現嗎?

+0

我在最後調用了「presentViewController」,但是我忘了在問題中添加了。 – Kahsn