В конечном счете, я хотел бы знать, как сохранить UIView (глобально, если необходимо) из одного контроллера представления, чтобы на него можно было ссылаться и вызывать обратно вверх из другого контроллера представления?
Я создал приложение, в котором две главные вкладки имеют вкладку «Главная страница» и вкладку «Руководство», но функциональность вкладки «Руководство» несколько уникальна тем, что это динамическая вкладка, которая в идеале будет отображать различное содержимое в зависимости от того, что«Гид» был выбран на вкладке «Главная».Таким образом, на вкладке «Главная» есть несколько кнопок UIB, которые предназначены для загрузки данного руководства.Каждое руководство - это просто набор изображений, с которыми пользователь может взаимодействовать.Никаких проблем там нет.
Теперь на вкладке «Главная», когда пользователь выбирает руководство, которое он хочет просмотреть, я хотел перейти между вкладкой «Главная» и вкладкой «Руководство» с анимированным переходом CurlDown.Это единственное место, где у меня будет анимация перехода UIView - это означает, что обычное переключение вкладок пользователем будет стандартным мгновенным переходом без эффектов.
Вот как я реализовал переход с домашнего на руководство, когда пользователь выбирает руководство на вкладке «Главная».Это делается в HomeViewController как IBAction, назначенный всем UIB-кнопкам с направляющей загрузкой, каждая из которых имеет уникальный тег, который сообщает GuideViewController, какое руководство загружать:
- (IBAction)loadGuide:(id)sender
{
UIButton *button = (UIButton*) sender;
GuideViewController *guideController = [[GuideViewController alloc] initWithNibName:@"GuideViewController" bundle:nil];
self.guideViewController = guideController;
[self.guideViewController activateGuide:button.tag];
[UIView transitionFromView:self.view
toView:guideController.view
duration:1.0
options:UIViewAnimationOptionTransitionCurlDown
completion:^(BOOL finished){
UITabBarItem *tabBarGuide = [[self.tabBarController.tabBar items] objectAtIndex:1];
[tabBarGuide setEnabled:TRUE];
self.tabBarController.selectedIndex = 1;
}];
[guideController release];
}
// End (IBAction)loadGuide
Это работает очень хорошо, додо того момента, когда мне нужно будет включить вкладку «Руководство» и перейти к ней.Похоже, что в этот момент создается другой экземпляр GuideViewController, который заменяет тот, который был первоначально создан и переведен из HomeViewController, как показано выше.
Так что я подумал, что, возможно, я мог бы обойти это, вместо этого, переместив загрузку направляющих в новое представление, которое не используется с UITabBar, а затем загрузив и перейдя в это представление со вкладки Home.так же, как я сделал в приведенном выше коде.Затем, после переключения вкладок, мне нужно каким-то образом вызвать его в контроллер представления моей вкладки, в качестве подпредставления или тому подобного.
Я думаю, что после процесса переключения вкладок представление все еще будет существовать в памяти, я просто не знаю, как получить к нему доступ, поэтому я могу показать его снова после того, как представление вкладки Guide скрыло его.Должен ли я назначить представление некоторой глобально доступной переменной из HomeViewController, чтобы я мог затем получить к ней доступ из GuideViewController (представление вкладки Guide)?
Я также открыт для любых альтернативных предложений, если вы считаете, что такой подход плохой!Сначала я попытался решить эту проблему, загрузив детали активного руководства в базу данных, а затем восстановил эти данные, когда включился контроллер представления вкладки «Руководство». Однако представление вкладки «Руководство» должно быть кэшировано или что-то в этом роде, потому что если пользователь возвращаетсяна домашнюю страницу и выбирает новое руководство, он оживит переход к этому руководству, но затем, когда включается переключатель вкладок «Домой к руководству», он переходит обратно в то же состояние, в котором был вид вкладки «Руководство».прежде чем пользователь вернулся на домашнюю страницу, чтобы выбрать новую вкладку.Кроме того, я заметил, что метод ViewDidLoad больше не вызывается при ручном или программном переключении вкладок, поэтому я решил, что другое представление также должно быть в памяти!(«Другое представление», являющееся либо исходным экземпляром представления GuideViewController, инициируемого на вкладке «Главная» после выбора кнопки-указателя, либо новым представлением, как упоминалось ранее, которое, по сути, будет выполнять то же самое, хотя и в отдельном классе.)
Итак, подведем итог:
- У меня есть две вкладки, Домашняя страница и Руководство
- Домашняя страница имеет несколько кнопок UIB, которые при нажатии будут загружать определенную направляющую
- Когданажатие кнопки UIB on Home переходит от вида вкладки «Домой» к представлению вкладки «Справочник» CurlDown без предварительного переключения на вкладку «Руководство», так как это приведет к потере эффекта CurlDown
- Затем мне нужно программно активировать переключатель табуляции, который, кажется, загружает новый экземпляр вида Guide, который эффективно закрывает другой экземпляр
- Я хочу знать, могу ли я как-то просто вызвать первый экземпляр, каким-то образом, возможно, сохранив другой экземпляр как глобальный или что-то подобное?
- Обдумайте вопрос о том, как передать экземпляр UIView вокруг нескольких контроллеров UIView