Отправка сообщения в подпредставление после автоповорота - PullRequest
1 голос
/ 09 сентября 2010

У меня довольно простая иерархия представлений в приложении для iPad.

Окно -> RootView -> TableView / DetailView

TableView и DetailView - родные братья, добавленные как подпредставления (согласно решению предыдущего вопроса). На запуске TableView впереди. Когда вы выбираете ячейку, вызывается метод в делегате приложения, который заменяет их, помещая DetailView впереди. Кнопка закрытия в DetailView делает обратное.

Отлично работает.

Однако ... DetailView содержит UIScrollView, нарисованный в .xib Когда DetailView выходит вперед, у меня есть метод, который получает информацию о содержимом ячейки, выбор которого вызвал изменение. Это заполняет детальный вид содержимым метки и изображением. Метки являются простыми установщиками для IBOutlets для меток в .xib Размер изображения соответствует высоте UIScrollView, сохраняя пропорции. Это делается программно, добавляя его в UIImageView, который добавляется в UIScrollView.

Поведение, которое я имею, хорошо для Портрета. Когда он поворачивается в альбомную, я хочу изменить размер изображения, чтобы он соответствовал width включающего UIImageView (и впоследствии включающего UIScrollView). У меня есть отличный код для изменения размера изображения (любезно добавлено добавление категории в UIImage из [текст ссылки] [1]

ПРОБЛЕМА ... Только RootViewController отвечает на вызовы didRotateToInterfaceOrientation. Мне нужно отправить сообщение об этом методу на контроллере DetailViews, сказав ему изменить размер изображения, а затем перерисовать связанный UIImageView. Ссылка на контроллер подпредставления кажется простой и, возможно, я упускаю простой ответ. Я пытался использовать:

[[self.view.subviews objectAtIndex:1] didRotateFromInterfaceOrientation:fromInterfaceOrientation];

и

[self.view viewWithTag:[[self.view.subviews objectAtIndex:1] tag]]

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

Может кто-нибудь указать мне правильный путь?

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Вздох. Кажется, процесс написания вопроса помог мне лучше сформулировать его и найти ответ ...

Ссылка на делегат приложения, который уже имеет соединения с контроллерами представления ...

[[(AppDelegate *)[[UIApplication sharedApplication] delegate] detailViewController] methodToCall];
0 голосов
/ 10 сентября 2010

Лучший способ вызвать методы поворота для all ваших контроллеров представлений - это использовать поставляемый Apple контроллер корневых представлений и отображать любые дочерние представления через эти контроллеры.К ним относятся UINavigationController, UITabBarController и iPad UISplitViewController.

События навигации будут отправляться только в корневой контроллер представления, то есть контроллер представления в главном UIWindow вашего приложения.Это не задокументировано, но может быть выведено с некоторой работой.Похоже, что корневые контроллеры Apple могут передавать события вращения.

Это может быть достигнуто вручную (т.е. без Apple RVC), но требует отслеживания всех ваших дочерних VC и использования KVC для некоторых свойств только для чтения, что, вероятно, приведет к вылету из магазина приложений.

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

Подробнее о контроллере навигации см. Ниже.

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html

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