задержать загрузку UIWebView в приложении UITabBar - PullRequest
0 голосов
/ 26 апреля 2009

У меня есть приложение для iPhone на основе UITabBar с 4 различными UIWebViews под каждой вкладкой. Прямо сейчас все UIWebViews загружаются при запуске, и это занимает слишком много времени.

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

У меня есть отдельные ViewControllers, настроенные для каждой вкладки, и они есть в каждом файле .m:

- (void)viewDidLoad {

NSString *urlAddress2 = @"http://google.com ";

//Create a URL object.
NSURL *url2 = [NSURL URLWithString:urlAddress2];

//URL Requst Object
NSURLRequest *requestObj2 = [NSURLRequest requestWithURL:url2];

//Load the request in the UIWebView.
[webView2 loadRequest:requestObj2];

}

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

Большое спасибо!

Ответы [ 4 ]

1 голос
/ 26 октября 2009

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

В зависимости от того, как вы хотите настроить вещи, вы можете поместить обратный вызов в "webViewDidFinishLoad" (или, возможно, shouldStartLoadWithRequest или webViewDidStartLoad), который вызывает уровень модели для удаления из очереди и обслуживания следующего запроса. В целях безопасности вам также понадобится тайм-аут на уровне модели.

Примечание: вам также нужно добавить некоторый пользовательский код в shouldStartLoadWithRequest, чтобы различать клики и слой модели, вставляющий данные. Т.е. вы хотите вернуть NO или YES в зависимости от навигационного типа.

1 голос
/ 26 апреля 2009

Если вы используете ASIHTTPRequest вместо NSURLRequest, вы можете запустить синхронный запрос для первого URL. Как только этот запрос будет завершен, вы можете запустить другие три URL-запроса асинхронно (т.е. в фоновом режиме).

0 голосов
/ 26 апреля 2009

Использовать viewDidAppear. Это будет отправлено на контроллер после того, как представление полностью появится и анимация закончится.

0 голосов
/ 26 апреля 2009

Вы можете использовать NSTimer или выполнить загрузку в viewDidAppear или аналогичном.

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