Откладывание viewWillAppear до webViewDidFinishLoad
https://stackoverflow.com/questions/933414
Вопрос
<Р> У меня есть приложение, которое использует
UIWebViews
в нескольких контроллеров зрения. UIWebViews
используется для отображения локально сгенерированный HTML, не требуется медленный доступ к сети.
<Р> Чтобы сохранить память я только загрузить их по требованию, как продиктована ViewController viewWillAppear
обратного вызова. (И выгрузить закадровый экземпляров в ответ на didReceiveMemoryWarning
сообщения.)
<Р> Проблема заключается в том, что пользователь получает, чтобы увидеть HTML визуализируемого, иногда сопровождается вспышками стайлинга и других различных неприятных артефактов. Я бы скорее рендеринга сделать закадровый, и выявить полностью вынесенное мнение, когда его готовности.
<Р> Это было бы очень аккуратно, чтобы быть в состоянии иметь viewWillAppear
не возвращаться до тех пор, пока UIWebView полностью оказаны. Но как это сделать?
<Р> Я говорю UIWebView
, что для визуализации, отправив ему сообщение loadHTMLString:baseURL:
. Это асинхронный, а через некоторое время (в ближайшее время) позже делегат Webview ныряет перезвонил webViewDidFinishLoad
.
<Р> Я экспериментировал с управлением runloop внутри viewWillAppear
, работает либо NSDefaultRunLoopMode
или UITrackingRunLoopMode
. Это работает в тренажере (он жалуется на журнал
<Р> [CATransaction синхронизация] вызывается внутри транзакции р><Р>, но делает работу), но на устройстве это зависаний, с
webViewDidFinishLoad
никогда не вызывается.
<Р> (Кроме того, кажется, что загрузка UIWebView
свойство не работает. По крайней мере, после того, как я называю loadHTMLString:baseURL:
и перед тем, как обратный вызов, это не так.) Нет правильного решения
Другие советы
<Р> Много решений здесь, я думаю. Быстрый один должен загрузить UIWebView с его скрытым свойство установлено значение YES. Затем установите UIViewController в качестве делегата UIWebViews и реализации:
<Р>
- (void)webViewDidFinishLoad:(UIWebView *)webView
р>
<Р>, где вы установите свойство обратно в NO.
<Р> Вещь отметить, что webViewDidFinishLoad будет срабатывать несколько раз, если вы обрамлении / внедренный контент. Таким образом, вы должны следить за этим. Не должно быть действительно проблема, если вы загружаете локального контента.
<Р> Мне нравится решение лучший monowerker, но другое решение было бы удержать уже оказанной UIWebView все время (в каком-то более постоянного, чем объект контроллера представления). Я бы только сделать это, если внешний вид раствора monowerker является слишком разрушительны.
Не связан с StackOverflow