我想知道他们是否有办法在一个视图加载后立即将数据发送到另一个视图。我正在尝试创建一个存储类似highScore的应用程序但是将数据从gameOver视图传递到mainMenu的唯一方法是,如果他们单击主菜单并使用prepareForSegue方法。他们是否可以像viewDidLoad函数一样发送它?
谢谢!
答案 0 :(得分:1)
根据您使用UINavigationController
,GameOverViewController
在主菜单上添加以下代码:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
let navigationController = segue.destinationViewController as UINavigationController
let gameOverVC = navigationController.topViewController as GameOverViewController
gameOverVC.highScore = 26
}
如果您不使用UINavigationController
:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
let gameOverVC = segue.destinationViewController as GameOverViewController
gameOverVC.highScore = 26
}
然后,像这样添加你的highScore var:var highScore: NSString!
:
class GameOverViewController: UIViewController {
var highScore: NSString!
override func viewDidLoad() {
println(self.highScore)
}
}
它应该有用。
如果没有,请在帖子中添加更多代码。
编辑:
通过这种方式,您只需向前传递数据,而不是向后传递数据。要向后传递使用Delegation
,Singleton
,NSNotificationCenter
或NSUserDefaults
答案 1 :(得分:0)
要向后传递数据,即从第二个视图到第一个,有Delegation
模式和NSNotificationCenter
等选项。
假设我们使用 NSNotificationCenter 。
在您的情况下,我们需要从highScore
班级发送MainMenu
到GameOver
。
注册您的通知。(在MainMenu类的viewDidLoad中)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateHighScoreFromGameOver:", name: "notificationUpdateHighScoreFromGameOver", object: nil)
创建处理已发布通知的方法。 (在MainMenu班)
@objc func updateHighScoreFromGameOver(notification: NSNotification){
NSNumber highScore = notification.object;
}
发布通知当您的游戏结束时(显示游戏结束消息后的下一行)。
NSNotificationCenter.defaultCenter().postNotificationName("notificationUpdateHighScoreFromGameOver", object: hightScore_ofTypeNSNumber)
完成后删除观察者。 (在MainMenu类的viewWillAppear中)
NSNotificationCenter.defaultCenter().removeObserver(self name: "notificationUpdateHighScoreFromGameOver", object: nil);
//alternatively you can remove all observers on this object:
NSNotificationCenter.defaultCenter().removeObserver(self);
注意:如果您不删除以前添加的观察者并再次添加,则该方法将被调用两次。如果第三次添加相同的观察者,该方法将被调用三次,依此类推。