我从场景1切换到场景2,然后从场景2返回到场景1。我如何不仅将数据从场景2传递到场景1,还要在场景1中检测到我已经从场景2返回并执行场景1中的代码?
在Android中,我使用startActivity和onActivityResult来实现这个功能。
我从场景1切换到场景2,然后从场景2返回到场景1。我如何不仅将数据从场景2传递到场景1,还要在场景1中检测到我已经从场景2返回并执行场景1中的代码?
在Android中,我使用startActivity和onActivityResult来实现这个功能。
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()
}
}
程序错误的主要源头是“国家”,它是IT技术中最大的问题。
unwindSegue
是非确定性的,因为调用该方法的是UI而不是你。 - Daniel ShinSourceViewController
是否在转换完成后从 DestinationViewController
返回了呢? - André Slottadelegate.controller2DidReturn()
之前调用 self.parentViewController.dismissViewController()
就可以完成任务。 - Daniel ShinunwindSegue
是好还是坏,我的意思是为这样微不足道的工作引入状态是非常糟糕的。 - Daniel ShinSourceViewController
的 viewWillAppear
和 viewDidAppear
方法之前被调用 - 这就是我想要强调的全部内容... ;) - André Slottaclass 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
}
}
}
override func viewWillAppear(_ animated: Bool) {
if firstname != "" {
self.parent?.dismiss(animated: true, completion: nil)
//CustomViewController?.dismiss(animated: true, completion: nil)
let alertController = UIAlertController(title: "Hello", message: "This is a test", preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "Close Alert", style: .default, handler: nil)
alertController.addAction(defaultAction)
present(alertController, animated: true, completion: nil)
}
}