Переключение между дочерними контроллерами представления - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть контроллер представления, который содержит несколько представлений контейнера, мы назовем его HomeViewController. Я объявляю эти контейнерные представления (childViewControllers) как таковые (каждый из них представляет собой контейнерное представление со своим встроенным viewController:

private lazy var startContactViewController: StartContactViewController = {
    //Load Storyboard
    let storybaord = UIStoryboard(name: "Main", bundle: Bundle.main)

    //Instantiate View Controller
    var viewController = storyboard?.instantiateViewController(withIdentifier: "StartContact") as! StartContactViewController

    //Add View Controller as Child View Controller
    self.add(asChildViewController: viewController)

    return viewController
}()

private lazy var stopContactViewController: StopContactViewController = {
    //Load Storyboard
    let storybaord = UIStoryboard(name: "Main", bundle: Bundle.main)

    //Instantiate View Controller
    var viewController = storyboard?.instantiateViewController(withIdentifier: "StopContact") as! StopContactViewController

    //Add View Controller as Child View Controller
    self.add(asChildViewController: viewController)

    return viewController
}()

private lazy var startDayViewController: StartDayViewController = {
    //Load Storyboard
    let storybaord = UIStoryboard(name: "Main", bundle: Bundle.main)

    //Instantiate View Controller
    var viewController = storyboard?.instantiateViewController(withIdentifier: "StartDay") as! StartDayViewController

    //Add View Controller as Child View Controller
    self.add(asChildViewController: viewController)

    return viewController
}()

private lazy var loadingViewController: LoadingViewController = {
    //Load Storyboard
    let storybaord = UIStoryboard(name: "Main", bundle: Bundle.main)

    //Instantiate View Controller
    var viewController = storyboard?.instantiateViewController(withIdentifier: "loading") as! LoadingViewController

    //Add View Controller as Child View Controller
    self.add(asChildViewController: viewController)

    return viewController
}()

У меня есть две функции для добавления и удаления childViewControllers:

func add(asChildViewController viewController: UIViewController) {
    //Add Child View Controller
    addChildViewController(viewController)

    //Add Child View as Subview
    view.addSubview(viewController.view)

    //Configure Child View
    viewController.view.frame = view.bounds
    viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]

    //Notify Child View Controller
    viewController.didMove(toParentViewController: self)
}

func remove(asChildViewController viewController: UIViewController) {
    // Notify Child View Controller
    viewController.willMove(toParentViewController: nil)

    // Remove Child View From Superview
    viewController.view.removeFromSuperview()

    // Notify Child View Controller
    viewController.removeFromParentViewController()
}

Когда мое приложение загружается впервые, отображается StartDayViewController. В этом виде контроллер их кнопка. Когда пользователи нажимают эту кнопку, я бы хотел, чтобы StartDayViewController был удален и StartContactViewController был представлен. Как я могу добиться этого с помощью StartDayViewController?

Я также включил изображение раскадровки. Раскадровка изображения

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете сделать это, используя протокол

protocol StartVcProtocol {
         func startButtonPressed()
}

Пусть HomeViewController реализует это

extension HomeViewController: StartVcProtocol {
    func startButtonPressed() {
        // start button pressed -- do your remove and add stuff here
    }
}

Сейчас в StartVc

class StartVc: UIViewController {

    var delegate: StartVcProtocol?


 //inside you start button iBaction
delegate?.startButtonPressed()

}

Тогда при ленивой инициализации StartVc

viewController.delegate = self

Надеюсь, вы получите все кусочки.

...