Objective-C — задержка UINavigationController pushViewController

#objective-c #uitableview #uinavigationcontroller #delay

#objective-c #uitableview #uinavigationcontroller #задержка

Вопрос:

Я использую a UINavigationController вместе с a UITableView , чтобы, когда пользователь касается ячейки, он выводил на экран другой контроллер просмотра.

В этом контроллере представления, который я нажимаю на экран, я загружаю некоторый HTML в UIWebView , так что требуется некоторое время, прежде чем он завершит загрузку HTML. Я хотел бы отложить навигационный контроллер (чтобы он дождался завершения загрузки HTML), а затем вывести контроллер просмотра на экран. Как я могу достичь этого программно?

Комментарии:

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

Ответ №1:

Вы также могли бы реализовать это и заставить его «ожидать» вызова правильной функции делегирования:

http://developer.apple.com/library/IOs/#documentation/UIKit/Reference/UIWebViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UIWebViewDelegate

 - (void)webViewDidFinishLoad:(UIWebView *)webView
  

Ответ №2:

Вы не смогли точно определить время загрузки. Поэтому лучше сразу показать второе представление с UIWebView .

Показать второе представление с индикатором активности, запущенным в

 - (void)webViewDidStartLoad:(UIWebView *)webView
  

метод.

И в,

 - (void)webViewDidFinishLoad:(UIWebView *)webView
  

метод, остановите и скройте индикатор.

Ответ №3:

Было бы

 [performSelector:withObject:afterDelay:][1]
  

работает для вас? Что-то вроде:

 [navigationController performSelector:@selector(pushNewViewFromTableCell:) withObject:view afterDelay:1.0]
  

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

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

Комментарии:

1. Я видел приложения, которые использовали индикатор активности внутри ячейки табличного представления при загрузке данных. Любопытно, как они связали загрузку веб-представления с ячейкой табличного представления.

2. Я предполагаю, что через методы UIWebViewDelegate, которые вызываются для подачи сигнала о начале загрузки UIWebView и о ее завершении…

3. Ах да, это правда, просто установите UIWebViewDelegate в мой контроллер табличного представления.