uiwebviewdelegate не вызывается из невидимого uiwebview

Я пытаюсь избежать пустого белого окна, которое отображается, когда UIWebView загружает контент. Вместо того, чтобы помещать фон в UIWebView, я хотел бы просто разместить HUD в текущем окне, а затем нажать новый контроллер uiview, который содержит uiwebview, когда контент загружается. Вот что я сделал (код сокращен для здравого смысла):

Первый вид:

MyViewController *myVC = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
myVC.parentController = self.navigationController;
UIView *myView = [myVC view];      // Force view to load

MyViewController:

- (void)viewDidLoad
{
  ...
  [myWebView setDelegate:self];
  [myWebView loadHTMLString:htmlString baseURL:baseURL];
  ...
 }


- (void) webViewDidFinishLoad:(UIWebView*) webView {
     [parentController pushViewController:self animated:YES];
}

Итак, viewDidLoad вызывается, но ни один из методов uiwebviewdelegate не вызывается. Однако, если я нажму контроллер представления

Первый вид:

MyViewController *myVC = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[self.navigationController myVC animated:YES];

Затем вызываются все методы uiwebviewdelegate в MyViewController.

Я застрял.


person michael    schedule 15.04.2012    source источник


Ответы (1)


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

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

person jonkroll    schedule 15.04.2012
comment
То, что вы говорите, это то, что я делал, но проблема, с которой я столкнулся, заключалась в том, что, когда я нажимал на контроллер представления, для загрузки контента uiwebview требуется от 0,5 до 4 секунд, и пользователь в это время просто видит пустое белое окно. Я мог бы установить фоновое изображение во время загрузки html-контента, но я думаю, что было бы лучше просто вывести HUD поверх первого просмотра, пока контент не будет загружен, а затем отобразить uiwebview... Я думаю, что какое-то межстраничное изображение будет отвлекать для 0,5-секундных сценариев. - person michael; 16.04.2012
comment
Я согласен с тем, что показывать HUD — это то, что нужно, но я все же думаю, что вам лучше показывать HUD на целевом контроллере просмотра, пока вы загружаете контент после того, как произойдет переход. Если вы все еще хотите показать HUD на своем первом контроллере просмотра, я бы сделал ваш первый контроллер просмотра ответственным за запрос htmlString, а затем, когда ответ получен, установите строку ответа как свойство на вашем целевом контроллере просмотра, прежде чем вы нажмете его на свой стек навигации . - person jonkroll; 16.04.2012
comment
Я думаю, что мы немного сбились с пути... или я что-то упускаю. Моя проблема в том, что ни один из методов uiwebviewdelegate не вызывается до тех пор, пока не будет нажат целевой контроллер представления. После того, как uiwebview получит HTML, uiwebview все равно потребуется несколько секунд для загрузки ссылок/изображений, и за это время у меня будет пустой белый экран. Я хочу выяснить, почему методы делегата не вызываются... или найти другой способ подождать, пока uiwebview загрузит контент, прежде чем я его покажу. - person michael; 16.04.2012