我执行从场景1到场景2的segue。然后我从场景2返回到场景1.我怎样才能将场景2中的数据传递到场景1但在场景1中检测到我已经从场景2返回并执行场景1中的代码?iOS Xcode(swift) - 如何在展开后继续执行代码
在Android中,我使用startActivity和onActivityResult完成此操作。
我执行从场景1到场景2的segue。然后我从场景2返回到场景1.我怎样才能将场景2中的数据传递到场景1但在场景1中检测到我已经从场景2返回并执行场景1中的代码?iOS Xcode(swift) - 如何在展开后继续执行代码
在Android中,我使用startActivity和onActivityResult完成此操作。
介绍Bool
状态像其他答案的提示是非常糟糕,必须尽量避免使用,因为它极大地提高了您的应用程序的复杂性。
在许多其他模式中,解决此类问题最简单的方法是将delegate
对象传递给Controller2
。
protocol Controller2Delegate {
func controller2DidReturn()
}
class Controller1: Controller2Delegate {
func controller2DidReturn() {
// your code.
}
func prepareForSegue(...) {
// get controller2 instance
controller2.delegate = self
}
}
class Controller2 {
var delegate: Controller2Delegate!
func done() {
// dismiss viewcontroller
delegate.controller2DidReturn()
}
}
States are evil并且是最大的单一软件错误来源。
代表团是更好的模式。我和你在一起。但是在这种情况下,使用简单的放风延续究竟有什么不同呢?对我来说,听起来好像他需要知道当SourceViewController再次出现时应用程序是否从DestinationViewController返回...... –
@AndréSlotta一件事,你可以完全控制何时调用方法。 'unwindSegue'是非确定性的,因为它是用户界面,不是你称之为方法的。 –
但是如果 - 这就是我从他的问题中了解到的 - 他需要知道在转换完成后,SourceViewController是否从DestinationViewController **返回? –
,你可以做这样的:
class SourceViewController: UIViewController {
var didReturnFromDestinationViewController = false
@IBAction func returnToSourceViewController(segue: UIStoryboardSegue) {
didReturnFromDestinationViewController = true
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if didReturnFromDestinationViewController == true {
// reset the value
didReturnFromDestinationViewController = false
// do whatever you want
}
}
}
谢谢。我会试试看看它是否有效。 – Questioner
你是什么意思**,我从场景2 **返回?过渡完成了吗? –
我的意思是我用场景从场景2回到场景1。 – Questioner