2017-04-24 42 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