2010-11-09 5 views
0

Привет Я использую навигационные контроллеры много в своем приложении, но мои приложения начинают страдать от просмотров, которые снова и снова повторяют одни и те же представления и выталкивают их в стек контроллера контроллера, а не повторно используют существующие представления в стеке.Контроллеры IPhone для навигации - лучшая практика для повторного использования просмотров

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

Мне действительно нужно пройти через стек контроллера Nav и найти карту, которую я уже нажал, и переместить ее в верхнюю часть стека.

Вместо этого я создаю новый и просто нажимаю на него сверху.

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

Любой получил хороший пример поиска в стеке контроллера Nav.

Как мне это сделать?

Нужно ли указывать указатель на мой вид карты в App Delegate?

Если есть способ быстро найти представление в стеке или мне нужно сохранить индекс/NSDictionary в их местоположении.

Я заметил, что тот, кто пишет приложение Facebook, имеет ту же проблему. Когда появляются уведомления, они открывают приложение и создают экземпляр представления уведомлений и вставляют его в стек. Через некоторое время вы завершаете целую кучу старых окон уведомлений, чтобы вернуться в главное меню. cheers

+0

Вы можете использовать свойство UINavigationController, чтобы получить все контроллеры просмотра в стеке: http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html –

ответ

1

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

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated 

Если вы заранее знаете, что viewControllers будет в стек, вы можете нажать их в один раз ниже функции, а не толкать их снова и снова.

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated