我一直在寻找答案,但只能找到答案。

我的viewController1带有一个按钮,可以锁定到viewController2。没有代码,我通过“接口(interface)”构建器进行设置。在viewController2上,我有一个按钮可以自行关闭

 self.dismissViewControllerAnimated(true, completion, nil)

我想在 View 关闭时将字符串从viewController2传递回viewController1。我该怎么做呢?另外,我正在使用swift。

提前致谢!

最佳答案

有两种常见的模式,这两种模式都消除了viewController2明确了解viewController1的需要(这对于可维护性非常重要):

  • 为您的viewController2创建委托(delegate)协议(protocol),并将viewController1设置为委托(delegate)。每当您想将数据发送回viewController1时,都要让viewController2将“代表”数据发送给
  • 将闭包设置为允许传递数据的属性。当显示viewController2时,viewController1将在viewController2上实现该关闭。每当viewController2有数据要传回时,它将调用闭包。我觉得这种方法更“ swift ”。

  • 这是#2的一些示例代码:
    class ViewController2 : UIViewController {
        var onDataAvailable : ((data: String) -> ())?
    
        func sendData(data: String) {
            // Whenever you want to send data back to viewController1, check
            // if the closure is implemented and then call it if it is
            self.onDataAvailable?(data: data)
        }
    }
    
    class ViewController1 : UIViewController {
       func doSomethingWithData(data: String) {
            // Do something with data
        }
        override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
            // When preparing for the segue, have viewController1 provide a closure for
            // onDataAvailable
            if let viewController = segue.destinationViewController as? ViewController2 {
                viewController.onDataAvailable = {[weak self]
                    (data) in
                    if let weakSelf = self {
                        weakSelf.doSomethingWithData(data)
                    }
                }
            }
        }
    }
    

    关于model-view-controller - 在Swift中传递数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24318480/

    10-10 22:49