如何在使用协议解除UINavigation时收到通知?

时间:2017-03-07 10:45:16

标签: swift protocols uinavigation

我正在使用swift开发一个简单的基于UI工具包的游戏,有些页面会触发一个模态或另一个页面;当此页面完成后,它将返回调用页面。

我想知道的是我如何通知或观看或以其他方式收听它,以便我可以采取一些行动。

例如。

  1. 游戏有3名玩家

  2. 带模态对话框的页面。用户对此模式执行操作

  3. 对话框被解除并返回一些更改

  4. 现在,启动页面会轮流转移到下一位玩家,或者轮流上没有其他玩家;转到下一个segue。

  5. 我相信可以使用Protocols来实现吗?

    所以我想要的是听UINavigation回到我的启动页面并做一些动作。

    但是如何使用Swift做到这一点?

    由于

1 个答案:

答案 0 :(得分:1)

为此,您可以在swift中使用闭包

请参阅:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

当您展示第二个控制器时,您可以将closure设置为第二个控制器的属性。现在,当您关闭第二个控制器时,可以在第二个控制器的解除块中调用此闭包。

示例:

class FirstViewController: UIViewController
{
    func presentSecondController()
    {
        let secondController = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
        secondController.completionClosure = {
            //Write your code here that you want to execute on FirstViewController when secondController is dismissed
        }
        self.present(secondController, animated: true, completion: nil)
    }
}

class SecondViewController: UIViewController
{
    var completionClosure : (()->())?

    func dismissController()
    {
        self.dismiss(animated: true) { 
            if let closure = self.completionClosure
            {
                closure()
            }
        }
    }
}