如何从ViewController触发嵌入式ContainerViewController的操作以及如何反向操作?

问题描述 投票:0回答:2

有没有人知道如何将一个动作从ViewController传递给它的ContainerViewController。我尝试通过自己触发的操作隐藏容器视图。 ContainerViewController嵌入在容器视图中。

视图控制器:

@IBOutlet weak var ChoseLanguageContainer: UIView!


**ContainerViewController:**

@IBAction func action(_ sender: Any) {

    ViewController().containerView.isHidden = true 

} //I know this does not work
ios swift triggers embed uicontainerview
2个回答
0
投票

我有类似的要求,我创建了自己的委托方法,这些方法在ContainerViewController中实现。

 protocol  ContainerViewControllerDelegate :class{
        func notifyItemChange(any params you need to pass.)
    }

在我的容器ViewController中,我为delegate创建了一个变量。

var changeContainerDelegate :ContainerViewControllerDelegate?

在包含容器的父视图控制器中,我执行了以下操作。

获取嵌入容器中的视图控制器的实例。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if let containerViewController = segue.destination as? ContainerViewController{
             containerViewController.changeContainerDelegate = self

            }

在视图控制器中创建容器视图的IBOutlet。

符合此协议并在View控制器中编写实现。

func changeContainerVC(containerVCName : String ,dataToBePassed:[AnyObject]?) {
       containerView.isHidden = true
}

在ContainerViewController内部的按钮操作中调用委托,如:

changeContainerDelegate?.notifyItemChange()

这适合我。希望也帮助你!


0
投票

在你的代码中:

ViewController().containerView.isHidden = true 

您正在制作ViewController的新实例并使用它来隐藏containerView。这不行。相反,你需要隐藏当前containerView实例的ViewController,即self

以下是您可以尝试的代码:

class ViewController: UIViewController
{
    @IBOutlet weak var containerView: UIView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
    }

    @IBAction func hideContainerView(_ sender: UIButton)
    {
        self.containerView.isHidden = true
    }
}

查看层次结构:

enter image description here

如果您对此有任何其他问题,请与我们联系。

© www.soinside.com 2019 - 2024. All rights reserved.