获取容器视图中的父视图控制器并将其强制转换为您的父控制器类型(如thefredelement的评论中所提到的)将起作用,但它有一些缺点。
因此,“快速修复”可能是按照评论中建议的进行操作,但我提供这个答案是作为我认为长期处理应该如何处理的建议。 希望其他人找到它有用。 我知道对我来说经过思考过程很有帮助。
理想情况下,我认为您应该在ContainerViewController中声明一个变量,该变量要么是您父视图控制器的类,要么更好的是一个您父控制器将符合的协议。 然后,在父视图控制器的prepareForSegue中设置此变量。
与此同时,您的父级应该(或者至少可以)声明一个变量,其类型为容器视图的类型或容器将符合的另一个协议。然后,在父级的准备转场时,获得Container视图控制器的句柄并将其存储在您声明的变量中。
像这样:
在您的ContainerViewController中
var myContainerViewDelegate: ParentViewControllerOrProtocol
weak var myChildViewOutlet: ChildViewControllerOrProtocol
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "embededSegueToChild" {
if let dvc = segue.destinationViewController.contentViewController as? ChildViewControllerOrProtocol {
dvc.myContainerViewDelegate = self
myChildViewOutlet = dvc
}
}