2010-09-09 2 views
1

У меня довольно простая иерархия представлений в приложении для iPad.Отправка сообщения в подвью после авторотации

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

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

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

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

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

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

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

и

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

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

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

ответ

0

лучший способ получить методы вращения, вызванные на все ваши контроллеры View должны использовать поставляемый Apple Root View Controller и отображать любые дочерние представления через эти контроллеры. К ним относятся UINavigationController, UITabBarController и IPAD UISplitViewController.

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

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

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

См. Ниже подробную информацию о контроллере навигации.

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

1

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

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

[[(AppDelegate *)[[UIApplication sharedApplication] delegate] detailViewController] methodToCall]; 
Смежные вопросы