2015-11-26 77 views
4

我執行從場景1到場景2的segue。然後我從場景2返回到場景1.我怎樣才能將場景2中的數據傳遞到場景1但在場景1中檢測到我已經從場景2返回並執行場景1中的代碼?iOS Xcode(swift) - 如何在展開後繼續執行代碼

在Android中,我使用startActivity和onActivityResult完成此操作。

+0

你是什麼意思**,我從場景2 **返回?過渡完成了嗎? –

+0

我的意思是我用場景從場景2回到場景1。 – Questioner

回答

6

介紹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並且是最大的單一軟件錯誤來源。

+0

代表團是更好的模式。我和你在一起。但是在這種情況下,使用簡單的放風延續究竟有什麼不同呢?對我來說,聽起來好像他需要知道當SourceViewController再次出現時應用程序是否從DestinationViewController返回...... –

+0

@AndréSlotta一件事,你可以完全控制何時調用方法。 'unwindSegue'是非確定性的,因爲它是用戶界面,不是你稱之爲方法的。 –

+0

但是如果 - 這就是我從他的問題中瞭解到的 - 他需要知道在轉換完成後,SourceViewController是否從DestinationViewController **返回? –

1

,你可以做這樣的:

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 
    } 
    } 
} 
+0

謝謝。我會試試看看它是否有效。 – Questioner

相關問題