2015-04-17 25 views
11

Próbuję utworzyć dynamiczny przepływ widoku, który używa UIContainerViews do hosta UIViewControllers. UIContainerViews (lub UIViewControllers) należy programowo dodać do UIView, aby umożliwić wiele obok siebie.Czy można programować program UIContainerView?

Rozglądam się, ale nie mogę znaleźć konstruktorów, których mogę użyć do utworzenia mojego UIContainerView.

Czy istnieje prosty sposób na to, czy jest to wbrew normalnym wytycznym dotyczącym tworzenia widoków do ponownego użycia?

Podsumowując, chcę osiągnąć coś takiego:

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

Można dodać widoki innych kontrolerów ViewControllers do swojego "ContainerView" i programowo sterować widokami. – Eendje

+0

@JacobsonTalom Zastanawiałem się nad tym, ale zastanawiam się, czy nie będzie żadnych zwrotów. Jeśli na przykład wykonałem jakiekolwiek działania na UIViewController po ich "dodaniu", czy nie spowodowałoby to pewnych niespójności lub problemów, gdyby UIViewControllers nie zostały faktycznie dodane do widoku? – Chackle

+1

Cóż, podobnie jak Simon McLoughlin powiedział w swojej odpowiedzi: powinieneś również dodać ViewControllers jako dzieci itd. (Patrz jego odpowiedź). Jeśli chcesz przykład w szybkim tempie, mogę wysłać dla ciebie przykład. – Eendje

Odpowiedz

17

UIContainerView jest tylko wizualny sposób, aby dodać viewController jako dziecko drugiego i ustalania jego granic.

Możesz to zrobić programowo, dodając drugi viewController jako dziecko pierwszego, biorąc drugi widok i umieszczając go gdzieś w pierwszym widoku.

Coś takiego;

childVC = [[SomeViewController alloc] init]; 

[self addChildViewController:childVC]; 

[self.view addSubview:childVC.view]; 

[childVC didMoveToParentViewController:self]; 
+1

Jeśli jakieś działania zostaną wykonane na odwołaniu childViewController, czy będzie obsługiwać je poprawnie? Na przykład metoda presentViewController, mimo że nie jest fizycznie częścią interfejsu użytkownika, ponieważ dodano tylko właściwość .view? – Chackle

+5

@Chaczenie wszystkich interakcji będzie obsługiwane przez logikę wewnątrz 'SomeViewController'. Działa tak, jakby oba kontrolery viewController znajdowały się na ekranie w tym samym czasie, niezależnie od siebie. Jeśli użytkownik przewinie przewijanie do elementu nadrzędnego, rodzic zostanie powiadomiony, jeśli użytkownik przewinie przewijany widok na podrzędnym, childVC zostanie powiadomiony. Jedyną różnicą jest to, że rodzic musi zarządzać cyklem życia childVC –

+0

Dzięki za wyjaśnienie. Bardzo pomocne! – Chackle