2015-11-26 48 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

相关问题