Ios 在swift中引用父视图控制器

Ios 在swift中引用父视图控制器,ios,swift,Ios,Swift,此代码位于子视图控制器中 @IBAction func send(_ sender: UIButton) { let parentVC = (self.navigationController?.parent)! as! sendController parentVC.sendText.text = "" self.removeFromParentViewController() self.view.removeFromSuperview() } 按下

此代码位于子视图控制器中

@IBAction func send(_ sender: UIButton) {


    let parentVC = (self.navigationController?.parent)! as! sendController

    parentVC.sendText.text = ""

    self.removeFromParentViewController()
    self.view.removeFromSuperview()

}
按下按钮时,应用程序崩溃,出现错误“EXC_BAD_指令代码i386”


我引用父视图控制器的方式是否正确?

您可以在Swift 3中以“self.parent”的形式访问父视图控制器。

您可以在Swift 3中以“self.parent”的形式访问父视图控制器。

此外,如果显示了视图控制器(我的意思是不通过导航控制器),您可以在Swift中使用此属性访问父级:

self.presentingViewController

以下是有关属性的文档:

此外,如果显示了视图控制器(我的意思是不通过导航控制器推送),您可以在Swift中使用此属性访问父级:

self.presentingViewController

以下是有关该属性的文档:

您所说的“父项”是什么意思?此视图控制器是在“父视图”的容器视图中,还是指导航堆栈中的上一个视图控制器?由于你的强行展开和向下抛掷,你正在受到撞击;
self.navigationController?.parent
nil
,或者它不是
sendController
。如果您确实想要父控制器,则不太可能想要导航控制器的父控制器;导航控制器不在sendController类中的容器视图中。我有以下代码:让vc=self.storyboard?.instanceeviewController(带标识符:“alertController”)为!alertController self.addChildViewController(vc)self.view.addSubview(vc.view)@Paulw11Ok,所以实际上您是在将视图控制器的视图添加为子视图。您应该阅读
UIViewController
上的文档,因为它让您知道在添加子视图控制器时需要做什么;尤其需要调用
didMoveToParent()
。您应该能够说
self.parent
而不是
self.navigationController.parent
,因为没有涉及导航控制器。您所说的“parent”是什么意思?此视图控制器是在“父视图”的容器视图中,还是指导航堆栈中的上一个视图控制器?由于你的强行展开和向下抛掷,你正在受到撞击;
self.navigationController?.parent
nil
,或者它不是
sendController
。如果您确实想要父控制器,则不太可能想要导航控制器的父控制器;导航控制器不在sendController类中的容器视图中。我有以下代码:让vc=self.storyboard?.instanceeviewController(带标识符:“alertController”)为!alertController self.addChildViewController(vc)self.view.addSubview(vc.view)@Paulw11Ok,所以实际上您是在将视图控制器的视图添加为子视图。您应该阅读
UIViewController
上的文档,因为它让您知道在添加子视图控制器时需要做什么;尤其需要调用
didMoveToParent()
。您应该能够说
self.parent
而不是
self.navigationController.parent
,因为没有涉及导航控制器。我尝试使用self.parent.mylabel,但它无法访问它或任何其他outlets您无法直接使用
self.parent.mylabel
,因为
self.parent
属于
UIViewController
-您需要将
self.parent
分配给一个变量,并在代码中尝试向下转换它。我认为,如果您在子视图控制器中声明一个协议,并将父视图设置为它的委托,则会更好。然后,您可以使用协议中的方法与父类通信。我曾尝试使用self.parent.mylabel,但它无法访问它或任何其他outlets您不能直接使用
self.parent.mylabel
,因为
self.parent
属于
UIViewController
类型-您需要将
self.parent
分配给一个变量当你在代码中尝试时,我认为如果你在子视图控制器中声明一个协议,并将父视图设置为它的委托,会更好。然后,您可以使用协议中的方法与父类通信。