2012-06-08 2 views
1

У меня есть представление UIViewController внутри моего подкласса UIScrollView. Проблема в том, что мой UIViewController не получает делегата willRotate, вызываемого при повороте устройства. Вероятно, это связано с тем, что в UIView нет делегата вращения, реализованного в нем. Каков наилучший способ решить эту проблему?UIViewController внутри UIView не получает вращения делегирования

В принципе, у меня есть MainViewController, в котором он имеет UIScrollView. Внутри этого UIScrollView у меня есть subviews, представляющий собой кучу UIViewControllers. Проблема в том, что при повороте я не получаю вращения. Один из способов борьбы с этим - передать делегат от MainViewController на соответствующий UIViewController. Есть ли лучший/элегантный способ решить эту проблему?

Я добавляю его как подвью из моего UIScrollView, а не моего MainViewController, и вы не можете скрыть UIViewControllers из UIView. Исправьте меня, если я ошибаюсь

+0

Убедитесь, что свойство зрения '' MainViewController' в .autoresizeSubviews' установлена ​​в 'YES'. – skram

+0

Если вы используете iOS 5, вы должны использовать API childViewController и добавить все эти контроллеры представлений в качестве дочерних элементов контроллера просмотра прокрутки. Затем вы можете использовать методы вращения вместе со всеми другими способами внешнего вида. – Matt

+0

@Matt yes..I знал об этом .. но как добавить контроллер представления в виде дочернего представления прокрутки? Вы не можете добавить childViewController из права UIView? UIScrollView - это UIView, а не UIViewController. Я полагаю, что UIViewController содержит только UIViewController для UIViewController, а не UIView для UIViewController? Исправьте меня, если я ошибаюсь, понимая это – adit

ответ

0

Смотреть видео, которое я отправил в моем комментарии: https://developer.apple.com/videos/wwdc/2011/?id=102

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

Контроллер вида имеет представление и обеспечивает логику для этого вида и, скорее всего, некоторые из его подзонов.

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

Скажем, у вас есть MainViewController, и это представление UIScrollView (или подкласс). Внутри этого scrollview у вас может быть множество сложных представлений, которые гарантируют собственный контроллер, поэтому у вас есть класс SubViewController, у которого есть subview прокрутки в виде его вида.

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

[mainViewControllerInstance addChildViewController:subViewControllerInstance]; 

Но, подождите. Подвью пока не находится в иерархии представлений.

[mainViewControllerInstance.view addSubView:subViewControllerInstance.view]; 

Вы успешно создали действующую иерархию вида контроллера двух контроллеров просмотреть и установить соответствующий вид иерархию своих взглядов.

Теперь у вас будут соответствующие функции обратного вызова, так как MainViewController отправит их в SubViewController.

EDIT:

Смотрите документацию для вида зрения контроллера локализации: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

1

Я думаю, что вы идете против MVC pattern. Вы не можете иметь контроллер внутри представления; вместо этого у вас должен быть контроллер, который опосредует коммуникацию между представлением и входом пользователя. В вашем случае вы можете установить scrollview как self.view из MainViewController, а затем добавить представления viewcontrollers в виде подзонов.

+0

отличная идея .. однако снова .. У меня есть подкласс UIScrollView, внутри этого подкласса есть то, где я добавляю контроллер представления в виде subview. Должен ли я просто делегировать контроллеру представления, чтобы сказать, чтобы добавить vc в качестве потомка, когда Я добавляю его из вида прокрутки? – adit

+0

Я могу переместить всю логику подкласса UIScrollView, который у меня есть в моем MainViewController, потому что теперь это представление UIScrollView, однако я хочу повторно использовать этот UIScrollView в некотором другом UIViewController – adit

+0

. Думаю, вы не должны ставить представления uiviewcontrollers в виде подпрограмм scrollviews , это просто виды. У вас должен быть один контроллер, который управляет всеми областями. – Mat

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