我有4个视图,其中包含一个segue(它从json发送数据并将其存储在一个名为email的变量中),我将它传递给它:
A - > B(电子邮件) - > C(电子邮件)
... - > B(电子邮件) - > D(电子邮件)
所以我想做的是将segue的信息发送回:
C-> B.
D-> B.
知道我怎么能实现这个目标?
我想你是在放松一下。
引用文档:
...使用segue对象获取被解除的视图控制器,以便您可以从中检索数据。
请参阅View Controller Programming Guide for iOS上的创建放松瞄准。
传回数据的常用方法是使用委托。 Swift中的委派是使用协议完成的。因此,例如,您声明以下协议(请为协议和属性使用有意义的名称,以下只是一个示例):
protocol COrDDelegate {
func willReturn(someString: String)
}
然后,将相应的委托属性添加到C和D视图控制器:
class C: UIViewController {
weak var delegate: COrDDelegate?
...
}
(D也是如此)。你必须使用weak
修饰符来避免保留周期。之后,在解除视图控制器之前调用委托的方法:
func dismissMe() {
self.delegate?.willReturn(someString: "Meaningful data")
self.dismiss(animated: true, completion: nil)
}
在B中,您实现协议:
extension B: COrDDelegate {
func willReturn(someString: String) {
print(someString)
}
}
并在prepare(for:sender:)
segue准备方法中将委托属性分配给C或D(就像你可能正在为email
做的那样):
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let c = segue.destination as? C {
c.email = self.email
c.delegate = self
}
}
希望我能够传达一般的想法。祝好运!