我執行從場景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