2015-04-05 83 views
1

所以這裏是我的情況,我有兩個視圖控制器:viewControllerA和tableViewControllerB。在我的viewControllerA上,我有一個按鈕。而當它被按下時,它會調用當prepareforsegue被調用?

self.performSegueWithIdentifier("toControllerB", sender: self) 

而且,我寫了一個prepareforSegue功能如下所示:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if (segue.identifier == "toControllerB"){ 

     var controllerB = segue.destinationViewController as tableViewControllerB 
     controllerB.event = self.event 
    } 

在我tableViewControllerB我有一個函數如下所示

var event = nil 
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    self.viewDidLoad() 
    var cell = tableView.dequeueReusableCellWithIdentifier("controllerBCell") as? ControllerBCell ?? ControllerBCell() 
    //some code 
    print(event) 
    return cell 

} 

而當我運行我的應用程序時,似乎這個tableview函數在ControllerA中的prepareforSegue函數之前被調用。因此「事件」變量爲零。因此,我想知道是否有可能在controllerB中的這個tableview函數之前調用prepareforSegue函數?

謝謝

+1

你爲什麼要調用self.viewDidLoad()?通常它會自動調用。這是你自己的功能嗎? – 2015-04-05 00:11:31

+1

在prepareForSegue之前,不應該調用表視圖函數。在新控制器被實例化之後,但在視圖加載之前調用prepareForSegue。您不應該在cellForRowAtIndexPath中自己調用viewDidLoad。 – rdelmar 2015-04-05 00:15:47

+0

您確定在您的prepareForSegue函數中self.event不是零嗎? – ad121 2015-04-05 00:16:21

回答

2

鏈是這樣的。

  1. 首先prepareForSegue叫
  2. 然後viewDidLoad中被稱爲
  3. 隨後的cellForRowAtIndexPath被稱爲

我想這個問題是你的線

self.viewDidLoad() 

此功能被自動調用。我只是嘗試了其餘的代碼,並且它工作正常。

+0

prepareForSegue之前調用performSegue(withIdentifier:__)?還是相反呢? – bibscy 2017-03-05 19:54:47

相關問題