有没有人知道如何将一个动作从ViewController传递给它的ContainerViewController。我尝试通过自己触发的操作隐藏容器视图。 ContainerViewController嵌入在容器视图中。
的ViewController:
@IBOutlet weak var ChoseLanguageContainer: UIView!
**ContainerViewController:**
@IBAction func action(_ sender: Any) {
ViewController().containerView.isHidden = true
} //I know this does not work
答案 0 :(得分: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()
这对我有用。希望也帮助你!
答案 1 :(得分: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
}
}
查看层次结构:
如果您在此方面遇到任何其他问题,请与我们联系。