我已经尝试以多种方式从我的Undind Segue向后传递数据。看来数据没有被发送或在viewDidload((之后发送,因此我要设置的标签不会更新。Undind Segue正在工作,在下面,我为Segue做准备,并成功地将上一个视图控制器的标题更改为"新标题",但最后一行并未设置Nbarotohome.player.player。
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) {
}
在查看了这个问题之后与Undind Segue传递数据我还尝试在上一个视图控制器
中以这种方式获取数据 @IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
if let sourceViewController = segue as? BuyStats {
playerNameLabel.text = sourceViewController.playerName
}
}
如果我需要为自己想做的事情添加更多详细信息,请询问,我将编辑。我想问一个问题,但我很难制定。
似乎没有发送数据或在查看didload((之后发送,因此我要设置的标签不会更新。
在 undind segue 中,您正在返回已经创建的viewController
,因此viewDidLoad
在您遇到另一个viewController
之前很久以前发生了。
如果您使用的是segues,则不应与导航controller中的ViewController的数组或调用dismiss
一起陷入困境。 Undind Segue 将做所有这些。只需在prepare(for:sender:)
中获取 destination 并设置数据:
if segue.identifier == "unwindToViewController1" {
let nbaRotoHome = segue.destination as! NBARotoHome
nbaRotoHome.player = "new player name"
}
或在您的prepareForUnwind
中获取 source 并读取数据:
在此行中,您缺少.source
。更改:
if let sourceViewController = segue as? BuyStats
to:
if let sourceViewController = segue.source as? BuyStats