【发布时间】:2018-10-29 09:50:37
【问题描述】:
我有一个父视图控制器托管 3 个容器视图控制器。
在某些时候,我需要将数据从一个容器视图控制器传递到另一个容器视图控制器,并认为我可以通过委托模式来实现这一点。但是,我似乎无法弄清楚为什么没有触发委托并且接收容器视图控制器没有收到任何数据。
似乎无法发现我的设置方式可能存在什么问题。如果有推荐的方法在容器之间传递数据,我也全神贯注!
以下是设置的代码摘要:
class ParentViewController: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let firstContainerVC = segue.destination as? FirstContainerVC {
//....
}
if let secondContainerVC = segue.destination as? SecondContainerVC {
//....
}
}
protocol Delegate {
func passX(a: String?)
func passY(b: String?)
}
}
class FirstContainerVC: UIViewController {
var delegate: Delegate?
if isTrue {
delegate.passX(a: "TestOne")
} else {
delegate.passY(b: "TestTwo")
}
}
class SecondContainerVC: UIViewController, Delegate {
override func viewDidLoad() {
let firstVC = self.storyboard?.instantiateViewController(withIdentifier: "firstContainer") as! FirstContainerVC
firstVC.delegate = self
}
func passX(a: String?) {
//if let a = a....
}
func passY(b: String?) {
//if let b = b....
}
}
【问题讨论】:
-
如果第二个容器视图控制器都包含在同一个父视图控制器中,为什么还要实例化第一个容器视图控制器?
-
@slickdaddy 我想我必须实例化它来获取委托属性,抱歉我对此很陌生,你介意详细说明建议的方式吗?
-
发布你的父视图控制器,我会解释。
-
@slickdaddy 重新发布,不确定它是否提供了我通过情节提要嵌入 VC 的详细信息,但是看到下面的 smartcats 评论,我想我需要在其他地方重新组织我继承的委托......父母?
-
当您说父视图控制器包含其他3个视图控制器时,您的意思是您已经明确地在它们之间建立了父子关系?或者你的意思是所有 3 个视图控制器都是从父视图控制器导航到的?
标签: ios swift uiviewcontroller delegates delegation