UIViewКонтроллер в UIView - PullRequest
10 голосов
/ 10 мая 2011

Могу ли я загрузить UiViewController в UIView в другом UIViewcontrller.

предположим, что UIViewControllerA имеет UIView с именем subuiview.Могу ли я загрузить UIViewControllerB в subbuiview?

Спасибо!

Ответы [ 4 ]

23 голосов
/ 10 мая 2011

Начиная с iOS 5

В iOS 5 были добавлены «Контейнерные контроллеры представления». Вы можете добавить контроллер представления в качестве дочернего элемента другого с addChildViewController:.
Вы также несете ответственность за добавление его представления к представлению его родителя.

Все хорошо документировано в документации iOS SDK: Реализация пользовательского контроллера представления контейнера .

Чтобы добавить дочерний контроллер вида:

childViewController.frame = ...
[self.view addSubview:childViewController.view];
[self addChildViewController:childViewController];
[childViewController didMoveToParentViewController:self];

и удалить его:

[self willMoveToParentViewController:nil];
[self.view removeFromSuperview];
[self removeFromParentViewController];

До iOS 5

Можно загрузить другой контроллер представления и добавить его представление как подпредставление представления другого контроллера.

UIViewController *subController = ...
[self.view addSubview:subController.view];

Хотя это не рекомендуется в соответствии с рекомендациями Apple:

Каждый пользовательский объект контроллера представления вы создать отвечает за управление всеми просмотров в одном представлении иерархия. [...] один на один соответствие между взглядом контроллер и взгляды по его мнению иерархия является ключевым дизайном рассмотрение. Вы не должны использовать несколько пользовательских контроллеров представления управлять различными частями одного и того же просмотр иерархии.

(из Руководство по программированию контроллера View )

Ваш субконтроллер не будет получать события вращения или viewWillAppear, viewWillDisappear и т. Д. (Кроме viewDidLoad).

Так что Apple советует нам использовать один контроллер представления, управляющий всей иерархией представления (но не запрещает использовать несколько).

Каждый вид все еще может быть пользовательским подклассом UIView. Возможно, вам не нужен другой контроллер представления, а скорее пользовательский вид.

2 голосов
/ 11 августа 2012

Всегда было проблематично просто использовать addSubview, чтобы добавить представление контроллера представления как подпредставление другого. Особенно плохо, когда люди используют его для перехода между представлениями, вместо того чтобы полагаться на другие, более надежные решения, такие как presentViewController или pushViewController.

Если вы действительно хотите добавить одно представление контроллера представления как подпредставление другого, iOS5 представила «сдерживание контроллера представления». Ограничение обсуждается в Руководстве по программированию View , а также в сессии WWDC 2011 102 . Суть в том, что вы хотите обеспечить синхронизацию иерархии контроллера представлений с иерархией представлений посредством вызовов addChildViewController, didMoveToParentViewController и т. Д. Подробности см. В документации и видео.

1 голос
/ 10 мая 2011
[self addSubview:viewControllerB.view];

попробуйте это в дополнительном представлении

0 голосов
/ 10 мая 2011

Ну, вы не можете технически загрузить viewcontroller. Вы можете загрузить представление viewcontroller как подпредставление любого представления.

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

addsubview:controller.view - метод, который вы хотите посмотреть.

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