Swift-展开分段传递数据混淆
我已经尝试过从我的放松序列以多种方式向后传递数据。看起来数据没有被发送,或者在viewDidLoad()之后被发送,所以我试图设置的标签没有得到更新。解卷segue正在工作,下面我使用prepare for segue成功地将上一个视图控制器的标题更改为“new title”,但最后一行没有将nbaRotoHome.player设置为“new player name”Swift-展开分段传递数据混淆,swift,segue,prepare,unwind-segue,Swift,Segue,Prepare,Unwind Segue,我已经尝试过从我的放松序列以多种方式向后传递数据。看起来数据没有被发送,或者在viewDidLoad()之后被发送,所以我试图设置的标签没有得到更新。解卷segue正在工作,下面我使用prepare for segue成功地将上一个视图控制器的标题更改为“new title”,但最后一行没有将nbaRotoHome.player设置为“new player name” override func prepare(for segue: UIStoryboardSegue, sender: Any?
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) {
}
看了这个问题,
在上一个视图控制器中,我也尝试过以这种方式获取数据
@IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
if let sourceViewController = segue as? BuyStats {
playerNameLabel.text = sourceViewController.playerName
}
}
如果我需要添加更多的细节,我想做什么,请询问,我会编辑。我想问这个问题,但我在表达上有困难
看起来数据没有被发送,或者在viewDidLoad()之后被发送,所以我试图设置的标签没有得到更新
在展开序列中,您将返回到已创建的viewController
,因此viewDidLoad
发生在您切换到另一个viewController
之前很久
如果您使用的是segues,则不应在navigationController中使用ViewController数组,也不应调用
Disclease
。放松阶段将完成所有这些。只需在准备(发件人:)
中获取目的地并设置数据:
if segue.identifier == "unwindToViewController1" {
let nbaRotoHome = segue.destination as! NBARotoHome
nbaRotoHome.player = "new player name"
}
或者在prepareForUnwind
中获取源代码并读取数据:
if segue.identifier == "unwindToViewController1" {
let nbaRotoHome = segue.destination as! NBARotoHome
nbaRotoHome.player = "new player name"
}
这一行缺少.source
。更改:
if let sourceViewController = segue as? BuyStats
致:
谢谢你的回复。然而,我仍然有困难。如果已经调用viewDidLoad(),那么如何使用新数据更新它?假设我已经在viewDidLoad()中设置了一个标签,现在我想在展开时更改它。是否还需要做其他事情(比如再次调用viewDidLoad()),或者重新分配变量就是您需要做的全部工作?我试过了,但没有任何运气。将更新标签的代码放入自己的方法中。从viewDidLoad()和您称为prepareForUnwind的展开着陆点调用该方法。