![](/img/trans.png)
[英]How to pass the data from modally presented ViewController to another ViewController in Xamarin.iOS?
[英]How to pass the data from modally presented ViewController to parent ViewController in swift 5?
我在按钮单击时从第一个视图 controller 有两个视图控制器,我以模态方式显示另一个视图控制器。 我不确定如何将数据从模态视图控制器传递到父视图控制器。
哪种方法最好、最干净?
感谢帮助。
我指的是 parentVC 和presentedVC 的答案。 您可以将闭包传递给presentedVC,以便稍后在它有数据时执行,也可以使用委托模式与parentVC通信。 这两种方法各有利弊:
1.闭包:
如果您只需要从presentedVC 将数据传递给parentVC 一次,这种方法就很有用。 首先像这样在presentedVC中定义一个公共闭包。 我在这里假设您需要将 [String: String] 类型的字典发送回 parentVC。
class PresentedVC : UIViewController {
var closure : (([String: String]) -> Void)?
}
现在,当您初始化presentedVC 并在parentVC 上模态显示它时,您需要指定您需要对收到的字典执行什么操作。 通过 parentVC 像这样:
//Initialise presentedVC
presentedVC.closure = { (dict) in
//Make parentVC do something with the dictionary
}
//present it modally
在此之后,当您想与 parentVC 通信时,您只需要从presentedVC 执行此闭包。 请记住正确使用弱引用以不创建保留循环。
2.委托模式:
当有一个 stream 事件想要传回给 parentVC 而不是像上面那样只有一个事件时,这种方法很有用。 首先,我们需要定义一个协议。再次,我假设您需要将类型为 [String: String] 的字典发送回 parentVC。
protocol PresentedVCCallbacks {
func didStartDataGathering()
func didCompleteDataGathering(data:[String: String])
}
您需要 parentVC 来实现此协议并在您展示它时在您的presentedVC中定义一个委托:
//Initialise presentedVC
presentedVC.delegate = parentVC
//present it modally
现在只需在需要时使用此委托与 parentVC 进行通信:
//Lets assume we have a dictionary prepared at a point in presentedVC which needs to be sent to parentVC
delegate.didCompleteDataGathering(data:data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.