как загрузить контроллеры дочерних представлений или представления контейнеров - Swift

containerView

У меня нет проблем с отображением каждого представления контейнера при переключении между ними с помощью сегментированного контроллера. У меня есть проблема с тем, что всякий раз, когда загружается родительское представление, также загружаются как синее, так и зеленое представление контейнера.

Я хочу, чтобы синий загружался с родительским контроллером представления, а зеленый загружался только при переключении сегментированного элемента управления. Любые идеи?

  • Под загрузкой я имею в виду, что вызывается viewDidLoad, ViewDidAppear, ViewDidlayoutSubviews и т. д.
override fund viewDidload() {
super.viewdidload()

   let child = GreenViewController()
   addChild(child)
   child.view.frame = frame
   view.addSubview(child.view)
   child.didMove(toParent: self)
}

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


person Chris Comas    schedule 22.06.2020    source источник
comment
Мне просто интересно, есть ли у вас два представления контейнера для вашего основного контроллера представления? Потому что, насколько мне известно, у вас может быть только один переход для встраивания на представление контейнера.   -  person Andrew    schedule 22.06.2020
comment
да, я использую 2 разных представления контейнера только для простоты и организации. Каждое представление контейнера будет иметь собственное табличное представление. Я хочу легко переключаться между ними, используя мой сегментированный элемент управления. однако я хочу, чтобы синий загружался автоматически, а зеленый загружался только тогда, когда сегментированный элемент управления переключается на второй   -  person Chris Comas    schedule 22.06.2020
comment
Поскольку вы оба объявили в раскадровке, они оба будут загружены, а затем запустится раскадровка. У вас должно быть только одно представление контейнера. Вероятно, лучше программно добавить контроллеры представления в представление контейнера, чем пытаться сделать это в раскадровках.   -  person Andrew    schedule 22.06.2020
comment
Ознакомьтесь с этим руководством Джона Санделла, в котором объясняется, как это сделать программно (обратите внимание, что он загружает контроллер дочернего представления в основной вид, но его легко переключить, чтобы добавить дочерний элемент в любое представление, которое вы хотите) swiftbysundell.com/basics/child-view-controllers   -  person Andrew    schedule 22.06.2020
comment
Также взгляните на этот учебник Пола Хадсона, он посвящен шаблону координатора, однако есть действительно интересный момент о протоколе Storyboarded для загрузки контроллеров представления из раскадровки, который может быть полезен и вам. hackingwithswift.com/articles/ 71/   -  person Andrew    schedule 22.06.2020


Ответы (1)


Насколько я понимаю, есть 2 представления контейнера, и вы хотите видеть синее представление, когда сегментированное первое, и вы хотите видеть зеленое представление, когда сегментированное второе, если это правда, решение такое;

Вы должны инициировать uivew (удерживая клавишу Ctrl и перетащив его в контроллер просмотра для синего и зеленого представления контейнера) (вам нужно добавить 2 разных вида контейнера) и написать

if segmented.selectedIndex == 0 { 

    greenView.isHidden = true
    blueView.isHidden = false

} else if segmented.selectedIndex == 1 {

    greenView.isHidden = false
    blueView.isHidden = true
}
person Burak Köse    schedule 22.06.2020