Как правильно сделать контейнерное представление, которое содержит некоторые viewControllers (программно)? - PullRequest
0 голосов
/ 15 мая 2019

Я хочу создать контейнер View программно, который имеет внутри несколько контроллеров представления.У меня есть сегментированный контроллер, который, когда пользователь нажимал кнопку, должен отображать определенный viewController без выполнения перехода.У меня есть все внутри ViewController, я хотел знать, как правильно заставить сегментированный контроллер отображать определенный контроллер представления при нажатии.

func setUpSegmentedControl() {
    let seg = UISegmentedControl(items: ["1", "2", "3"])
    seg.selectedSegmentIndex = 0
    seg.translatesAutoresizingMaskIntoConstraints = false

    seg.layer.cornerRadius = 8  
    seg.backgroundColor = UIColor.white 
    seg.addTarget(self, action: #selector(changeColor(sender:)), for: .valueChanged)
   view.addSubview(seg)

           NSLayoutConstraint.activate([
 seg.centerXAnchor.constraint(equalTo: view.centerXAnchor),                                                     seg.centerYAnchor.constraint(equalTo: view.centerYAnchor),                                     seg.leadingAnchor.constraint(equalTo: view.leadingAnchor),                                   seg.trailingAnchor.constraint(equalTo: view.trailingAnchor),                                seg.heightAnchor.constraint(equalToConstant: 50)

        ])
}   

 @objc func changeColor(sender: UISegmentedControl) {
    switch sender.selectedSegmentIndex {
    case 0:
        addChild(FirstViewController())

        print("1")
    case 1:
        addChild(SecondViewController())

    print("2")
    default:
        addChild(ThirdViewController())

        print("3")
    }
}

1 Ответ

1 голос
/ 15 мая 2019

Чтобы программно добавить контроллер представления в представление контейнера, вам нужно вызвать addSubview и didMove в дополнение к addChild.

let firstViewController = FirstViewController()
addChild(firstViewController)
firstViewController.view.translatesAutoresizingMaskIntoConstraints = false
containerView.addSubview(firstViewController.view) // replace `containerView` with the name of the view that's supposed to contain the VC's view

// add constraints or set frame manually
let trailingConstraint = firstViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor)
let leadingConstraint = firstViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor)
let topConstraint = firstViewController.view.topAnchor.constraint(equalTo: view.topAnchor)
let bottomConstraint = firstViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
NSLayoutConstraint.activate([trailingConstraint, leadingConstraint, topConstraint, bottomConstraint])

firstViewController.didMove(to parent: self)

Если вы хотите удалить дочерний контроллер программно:

let child = children.first // or other way to identify your VC
child?.willMove(toParentViewController: nil)
child?.view.removeFromSuperview()
child?.view.removeFromParentViewController()

Пример проекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...