2015-04-17 5 views
11

Я пытаюсь создать динамический поток представления, который использует UIContainerViews для размещения UIViewControllers. UIContainerViews (или UIViewControllers) необходимо программно добавить в UIView, чтобы разрешить несколько бок о бок.Могу ли я создать UIContainerView программно?

Я искал вокруг, но не могу найти конструкторы, которые я могу использовать для создания моего UIContainerView.

Есть ли простой способ сделать это или это против обычных рекомендаций по созданию многоразовых просмотров?

Подводя итог, я хочу, чтобы добиться чего-то вроде этого:

var containerView = UIContainerView() 
containerView.add(myViewController) 
+0

Вы можете просто добавить представления других ViewControllers в свой «ContainerView» и программно управлять представлениями. – Eendje

+0

@JacobsonTalom Я считал это, но мне интересно, будет ли какой-нибудь откат. Если, например, я выполнил какие-либо действия в UIViewController, как только они были добавлены, не приведет ли это к какой-либо непоследовательности или проблемам, если UIViewControllers фактически не добавляются в представление View? – Chackle

+1

Ну, как сказал в своем ответе Саймон Маклафлин, вы также должны добавить ViewControllers как дети и т. Д. (См. Его ответ). Если вам нужен пример в swift, я могу разместить пример для вас. – Eendje

ответ

17

UIContainerView это только визуальный способ добавить ViewController как ребенок другого и установив его границы.

Вы можете сделать это программно, добавив второй viewController в качестве дочернего элемента первого, взяв второй взгляд и разместив его где-то на первом взгляде.

Нечто подобное;

childVC = [[SomeViewController alloc] init]; 

[self addChildViewController:childVC]; 

[self.view addSubview:childVC.view]; 

[childVC didMoveToParentViewController:self]; 
+1

Если какие-либо действия выполняются над ссылкой childViewController, они будут обрабатывать их правильно? Например, метод presentViewController, несмотря на то, что он физически не является частью пользовательского интерфейса, поскольку добавлено только свойство .view? – Chackle

+5

@ Захват всех взаимодействий будет обрабатываться логикой внутри 'SomeViewController'. Он функционирует так, как если бы оба viewControllers были на экране одновременно, независимо друг от друга. Если пользователь прокручивает scrollView на родительском объекте, родитель будет уведомлен, если пользователь прокручивает scrollView на дочернем элементе, дочерний элемент будет уведомлен. Единственное отличие состоит в том, что родитель должен управлять жизненным циклом childVC –

+0

Спасибо за объяснение. Очень полезно! – Chackle

Смежные вопросы