我正在尝试制作一个使用三个容器来显示不同内容的应用程序,但我在容器之间进行通信时遇到问题 . 我成功地使用segue将一个容器中按钮的一些信息发送到另一个容器,但是这些信息的一部分也必须转发到第三个容器 . 为此,我想使用委托,但我不能将正确的ViewController引用到委托变量 .
所以我想要的如下:
-
CollectionViewCell点击,触发segue到TableVC
-
TableVC接收信息并更新表
-
TableVC在第三个VC中触发委托功能
-
第三个VC接收一些信息和更新视图
在上面我已经设法让1和2工作,但卡在3 .
我的协议如下:
protocol PurchaseDelegate {
func addToTotalAmount(product : Product)
}
在TableVC中我声明了 var delegate : PurchaseDelegate? = nil
并且在从segue触发的IBAction中: delegate?.addToTotalAmount(product)
在第三个VC我已经实现了如下代理:
class thirdVC:UIViewController,PurchaseDelegate {
func addToTotalAmount(product : Product) {
println("Adding....")
}
}
所有三个容器都在一个主VC中,它在应用程序中执行一些初始化操作 .
我的问题是,我不知道如何在tableVC中从thirdVC获取引用到我的委托变量 .
提前致谢 .
1 回答
经过@Anna Dickinson的灵感进一步搜索后,我最终找到了问题的解决方案 .
首先,必须在故事板中正确地订购容器 . 视图控制器实现委托协议的容器必须首先在列表中,然后是另一个视图控制器 .
然后,在主视图控制器(具有容器的视图的视图控制器)中实现prepareForSegue函数,因为它将在容器初始化时被触发 .
所有代码仍然如上所示,但主视图控制器将类似于以下内容:
我不确定这是否是正确的,也不是最好的方法,但它完全符合我的需要 .