我一直在寻找答案,但只能找到答案。
我有viewController1一个按钮可以选择viewController2。没有代码,我通过“接口”构建器进行设置。上,viewController2我有一个按钮,可以自行关闭
viewController1
viewController2
self.dismissViewControllerAnimated(true, completion, nil)
我想从视图传递viewController2回viewController1时传递一个字符串。我该怎么做呢?另外,我正在使用swift。
提前致谢!
有两种常见的模式,这两种模式都消除了viewController2明确了解viewController1的需要(这对于可维护性非常重要):
为您的viewController2创建委托协议,并将viewController1设置为委托。每当您想将数据发送回viewController1时,都要使viewController2将数据“委托”
将闭包设置为允许传递数据的属性。当显示viewController2时,viewController1将在viewController2上实现该关闭。每当viewController2有数据要传回时,它将调用闭包。我觉得这种方法更“迅捷”。
这是#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) } } } } }