我试着以多种方式从我的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
}
}
如果我需要添加更多的细节,我想要做什么请问,我会编辑。我想问这个问题,但我在制定麻烦。
感谢您的答复。然而,我仍然遇到麻烦。如果viewDidLoad()已被调用,那么它如何更新新数据?假设我已经在viewDidLoad()中设置了一个标签,现在我想在展开时对其进行更改。是否还有其他需要发生的事情(例如再次调用viewDidLoad()),还是重新分配变量所需的全部内容?我试过了,没有任何运气。 –
将更新标签的代码放入其自己的方法中。从viewDidLoad()调用该方法并从您调用prepareForUnwind的展开着陆点调用该方法。 – vacawama
用你的viewDidLoad代码更新你的问题。 – vacawama