ContainerView - насколько близко невидимое представление - PullRequest
0 голосов
/ 30 мая 2018

У меня есть эта раскадровка:

enter image description here

и этот код:

var actualVisibleView : String? = nil

func showSubViewInContainerView(view: String){
        let controller = storyboard!.instantiateViewController(withIdentifier: 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)

        if self.actualVisibleView != nil && self.actualVisibleView != view {
            controller.dismiss(animated: false) {
                print("UBIJAM: \(view)")
            }
        }
        self.actualVisibleView = view
        print("OTWIERAM: \(view)")
    }

В левом меню я открываю различныепросмотры в этом контейнере с использованием кода:

showSubViewInContainerView(view: "view1")
showSubViewInContainerView(view: "view2")
showSubViewInContainerView(view: "view3")
showSubViewInContainerView(view: "view4")

Этот код работает легко.Единственная проблема состоит в том, что когда я открываю новое представление в представлении контейнера, я хотел бы закрыть ранее видимое представление.В контейнере будет виден только один активный вид.

В настоящий момент существуют виды, перекрывающие друг друга.

Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 30 мая 2018

Перед добавлением нового вида в контейнер удалите другие виды

systemContainerView.subviews.forEach { $0.removeFromSuperview() }
systemContainerView.addSubview(controller.view)
...