2010-05-07 2 views
2

Может ли кто-нибудь предложить статью или пример того, как создать «бесконечное сверление» с помощью UINavigationController, как вы видите в приложениях Facebook, IMDB и BrightKite?«Бесконечное сверление» с помощью UINavigationController

+0

Вы могли бы уточнить, что вам нравится на Facebook, IMDB и BrightKite? Я был на сайте IMDB и не видел, о чем вы говорили. –

+0

В каждом из этих приложений iPhone есть как минимум один контроллер навигации, который позволяет вам бесконечно развернуть содержимое. Пример: в IMDB вы можете искать актера, открывать свой взгляд, открывать свой фильм, затем открывать другого актера, затем другой фильм и т. Д. И т. Д. Приложение явно отслеживает историю как-то и автоматически выскакивает определенный момент ... в противном случае он потерпел бы крах из-за превышения пределов памяти сторожевого пса. –

ответ

-1

Никогда не делал этого ... Я бы подошел к этому, сохранив стек с легким объектом, содержащим содержимое предыдущего представления (возможно, только URL?). Вместо того, чтобы просто нажимать на новый UIViewController на UINavigationController, вы бы пополнили свой текущий, без анимации, а затем нажмите на новое представление. Тем не менее, я не думаю, что это правильно обработало бы приятную анимацию.

Другой способ, который приходит на ум, - манипулировать массивом viewControllers UINavigationController. После нажатия на новое представление просто удалите предыдущий вид из массива. Таким образом, в стеке UINavigationController будет только один или два элемента. Обращение с кнопкой «назад» создало бы правильное представление, вставило бы его в массив viewControllers, а затем вытащил бы текущий. Управлять вашим состоянием будет легкий стековый стек объектов, а не суперкомпьютер.

-дан

+0

В настоящее время я изучаю использование TTNavigator от Three20 в качестве решения, поскольку оно, похоже, поддерживает эту функциональность ... хотя документация ужасная, поэтому я еще не уверен. –

4

The UINavigationController предназначен для использования таким образом. Если память становится проблемой, навигационный контроллер выдает скрытые виды и перезагружает их, когда придет время, чтобы перейти обратно в стек. По этой причине Apple рекомендует загрузить UIView s из NIB.

http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/NavigationControllers/NavigationControllers.html#//apple_ref/doc/uid/TP40007457-CH103-SW28

Прокрутите вниз до пункта № 4, «Настройка представления для контроллера просмотра корневого каталога.»

+0

kubi, Спасибо за подсказку. Вы пробовали это? Вы можете поместить журнал в viewDidUnload (или это не называется?). -dan –

+0

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

+0

@ Daniel на самом деле нет, но у меня также не было проблем с памятью при использовании NavControllers таким образом, поэтому я предположил, что все работает так же, как описано в документах. Пожалуйста, позвольте мне сейчас, если вы найдете по-другому. – kubi

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