2017-04-24 41 views
0

我試着以多種方式從我的unwind segue向後傳遞數據。看起來好像數據沒有被髮送,或者它在viewDidLoad()之後發送,所以我試圖設置的標籤沒有被更新。 unwind segue正在工作,下面我使用準備for segue並取得了一些成功,將之前的視圖控制器的標題更改爲「新標題」,但最後一行並未將nbaRotoHome.player設置爲「新玩家名稱」。Swift - 解繞Segue通過數據混淆

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "BuyStatsTapPager" { 
     let nav = segue.destination as! UINavigationController 


     let buyStatsTapPager = nav.viewControllers[0] as! BuyStatsTabPager 
      buyStatsTapPager.selectedPlayerBuyStats = selectedPlayer 
      buyStatsTapPager.buyStatsRef = self 

    } 

    if segue.identifier == "unwindToViewController1" { 

     var viewControllers: [UIViewController] = mainNavigationController.viewControllers as [UIViewController]; 

     if(viewControllers.count == 3){ 
      viewControllers.remove(at: viewControllers.count-2) 
      mainNavigationController?.viewControllers = viewControllers 
     } 

     let enteredContestViewController = viewControllers[viewControllers.count-1] 
     enteredContestViewController.title = "new title" 

     self.presentingViewController?.dismiss(animated: true, completion: nil) 

     let nbaRotoHome = segue.destination as! NBARotoHome 

     nbaRotoHome.player = "new player name" 


    } 

回到我以前的視圖控制器我有

@IBAction func prepareForUnwind(segue: UIStoryboardSegue) { 


} 

而且看這個問題 Passing data with unwind segue 之後我也嘗試獲取數據在前面視圖控制器這樣

@IBAction func prepareForUnwind(segue: UIStoryboardSegue) { 
    if let sourceViewController = segue as? BuyStats { 
     playerNameLabel.text = sourceViewController.playerName 
    } 
} 

如果我需要添加更多的細節,我想要做什麼請問,我會編輯。我想問這個問題,但我在制定麻煩。

回答

1

好像數據沒有得到發送或它在viewDidLoad()後發送,所以我試圖設置的標籤沒有得到更新。

開卷賽格瑞要返回一個已創建viewController,所以viewDidLoad發生很久以前,你segued其他viewController之前。


如果您使用塞格斯,你不應該用viewControllers在navigationController陣列碴或致電dismiss展開segue將完成所有這一切。剛剛獲得目的地prepare(for:sender:)並設置數據:

if segue.identifier == "unwindToViewController1" { 

    let nbaRotoHome = segue.destination as! NBARotoHome 

    nbaRotoHome.player = "new player name" 
} 

或您prepareForUnwind得到和讀取數據:

在這一行你缺少.source。更改:

if let sourceViewController = segue as? BuyStats 

到:

if let sourceViewController = segue.source as? BuyStats 
+0

感謝您的答覆。然而,我仍然遇到麻煩。如果viewDidLoad()已被調用,那麼它如何更新新數據?假設我已經在viewDidLoad()中設置了一個標籤,現在我想在展開時對其進行更改。是否還有其他需要發生的事情(例如再次調用viewDidLoad()),還是重新分配變量所需的全部內容?我試過了,沒有任何運氣。 –

+0

將更新標籤的代碼放入其自己的方法中。從viewDidLoad()調用該方法並從您調用prepareForUnwind的展開着陸點調用該方法。 – vacawama

+0

用你的viewDidLoad代碼更新你的問題。 – vacawama