Переход к представлению неизвестного типа в приложении для iPhone на основе навигации

В моем приложении для iPhone пользователь выбирает элемент из UITableView, чтобы выбрать ресурс для просмотра. Подкласс UIViewController, необходимый для обработки ресурса, неизвестен до тех пор, пока ресурс не будет извлечен, что может занять несколько секунд.

В ответ на действие выбора я нажимаю "загружающий" контроллер представления в стек навигации. Этот контроллер представляет представление с UIActivityIndicatorView вместе с (возможно) другой информацией о состоянии и инициирует загрузку выбранного ресурса. В этом представлении пользователь может отменить загрузку, и в этом случае я вернусь к списку ресурсов. Однако, если ресурс прибывает, создается соответствующий новый контроллер представления, соответствующий его типу.

Вот где он становится липким. Если я помещаю новое представление, зависящее от типа, в стек навигации, представление «загрузка» все еще находится в стеке; очевидно, что после завершения загрузки нет необходимости «возвращаться» к этому виду. Я пробовал просто добавить зависящее от типа представление как подвид представления «загрузка», но это не помещает мой зависящий от типа контроллер в стек навигации, поэтому у него нет [self navigationController ] для дальнейшей навигации.

Как я могу «заменить» текущий вид в стеке навигации новым? Или, в более общем плане, как я могу показать активность / прогресс, если я еще не знаю, какой контроллер будет использоваться для отображения извлекаемого ресурса?

Я нашел довольно классные классы индикаторов прогресса «HUD», но я не хочу, чтобы индикатор прогресса появлялся в верхней части списка выбираемых элементов. Вместо этого я хочу, чтобы пользователь почувствовал, что он «ушел» в новое пространство, ожидающее своего заполнения.

Я новичок в этом вопросе, поэтому надеюсь, что, по крайней мере, четко сформулировал вопрос. Спасибо за любую помощь, которую может предоставить


person jgarbers    schedule 28.10.2009    source источник
comment
Я нашел решение, но не знаю, лучший ли это (или хотя бы разумный) способ, поэтому я хотел бы оставить вопрос открытым. Чтобы заменить свой контроллер загрузки, я получаю весь стек контроллеров представления от контроллера навигации, removeLastObject, чтобы избавиться от загружающего, addObject на новый, зависящий от типа, а затем устанавливаюViewControllers на обновленный стек. Это кажется подходящим, или мне не хватает более элегантного подхода?   -  person jgarbers    schedule 28.10.2009


Ответы (1)


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

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

person gerry3    schedule 28.10.2009
comment
Я тоже попробую ... кажется чище, чем мой подход, но мне интересно, будет ли при переходе какой-нибудь визуальный шум. - person jgarbers; 30.10.2009
comment
Я подробнее рассмотрю контроллеры модального представления, но не похоже, что они будут работать, так как я не знаю, какой контроллер мне нужно создать, пока ПОСЛЕ завершения передачи. Сейчас я успешно использую ваш подход pop / push, но мне нужно быть осторожным ... [self navigationController] равен нулю после того, как текущее представление появляется, поэтому мне пришлось поместить контроллер навигации во временную переменную достаточно долго, чтобы выполните две операции. Спасибо! - person jgarbers; 30.10.2009
comment
Я думал, что представление загрузки будет представлено как модальное представление (а не конкретное представление, для которого вам нужно было загружать данные). - person gerry3; 30.10.2009
comment
Да ... но тогда какое представление является родительским для модального представления загрузки? Это то, что меня сбило с толку. - person jgarbers; 31.10.2009
comment
Это начинается с табличного представления. Пользователь нажимает на ячейку, представление загрузки отображается модально, загрузка завершается, представление загрузки закрывается, конкретное представление выделяется и помещается в стек навигации. Эти последние два шага могут происходить в методе, который вызывается после фактического завершения загрузки (этот метод может быть в контроллере табличного представления). - person gerry3; 31.10.2009