ContainerView视图中的“后退”按钮不起作用

时间:2018-06-26 07:37:24

标签: ios swift

我有此代码:

MainView.swift

func showSubViewInContainerView(view: String, parms: Int){
        let controller = storyboard!.instantiateViewController(withIdentifier: view)

        if view != "ProductDetailView" { 
            systemContainerView.subviews.forEach { $0.removeFromSuperview() }
        }

        if view == "ConceptGalleryView" {
            let con =  controller as! ConceptGalleryViewController
            con.idGallery = parms
        }


        systemContainerView.addSubview(controller.view)
        addChildViewController(controller)
        controller.view.translatesAutoresizingMaskIntoConstraints = false

        systemContainerView.addSubview(controller.view)

        NSLayoutConstraint.activate([
            controller.view.leadingAnchor.constraint(equalTo: systemContainerView.leadingAnchor),
            controller.view.trailingAnchor.constraint(equalTo: systemContainerView.trailingAnchor),
            controller.view.topAnchor.constraint(equalTo: systemContainerView.topAnchor),
            controller.view.bottomAnchor.constraint(equalTo: systemContainerView.bottomAnchor)
            ])

        controller.didMove(toParentViewController: self)

        self.actualVisibleView = view
        print("OPEN IN CONTAINERVIEW: \(view)")
    }

此代码在ContainerView中打开-视图:ProductDetailView

在ProductDetailView中,我有带有以下代码的按钮:

ProductDetailView.swift

@IBAction func backBtnPressed(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }

我想单击backBtnPressed关闭ProductDetailView视图并返回到可见的Mainview视图。 不幸的是,上面的代码不起作用(什么都不做)。

有人知道如何解决吗?

3 个答案:

答案 0 :(得分:1)

dismiss关闭由视图控制器以模态形式显示的视图控制器。

您没有显示视图控制器(而是将其添加为子视图),这就是dismiss不起作用的原因。

您可以将视图控制器设置为模态并显示吗?否则,您的按钮代码应将视图控制器作为子级删除。

答案 1 :(得分:1)

您可以通过以下方式实现:

1)创建委托模式

2)在func backBtnPressed(_ sender:Any)中调用在mainView中实现的委托方法

3)在mainView中的委托的实现方法    从systemContainerView删除您的productDetailView

答案 2 :(得分:0)

代替这个

controller.didMove(toParentViewController: self)

尝试presentpresentController

self.present(controller, animated: true, completion: nil)