我正在尝试制作一个使用三个容器来显示不同内容的应用,但我在容器之间进行通信时遇到问题。我成功地使用segue将一个容器中按钮的一些信息发送到另一个容器,但是这部分信息也必须转发到第三个容器。为此我想使用委托,但我不能将正确的ViewController引用到委托变量。
所以我想要的如下:
在上面我已经设法让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到我的委托变量的引用。
提前致谢。
答案 0 :(得分:0)
经过@Anna Dickinson的灵感进一步搜索后,我最终找到了问题的解决方案。
首先,必须在故事板中正确订购容器。视图控制器实现委托协议的容器必须首先在列表中,然后是另一个视图控制器。
然后,在主视图控制器中 - 具有容器的视图的视图控制器 - 实现了prepareForSegue函数,因为它将在容器初始化时被触发。
所有代码仍然如上所示,但主视图控制器将如下所示:
class MainViewController: UIViewController {
var actionVC : FirstViewController! // This is the one, that implements the delegate protocol
var tableVC : SecondViewController! // This is the one, that has a delegate variable
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "firstVC"){
self.actionVC = segue.destinationViewController as FirstViewController
} else if(segue.identifier == "secondVC"){
self.tableVC = segue.destinationViewController as SecondViewController
self.tableVC.delegate = self.actionVC
}
}
}
我不确定这是否是正确的,也不是最好的方法,但它完全符合我的需要。