iOS - проблемы с canGoForward и canGoBack в webViewDidStartLoad - PullRequest
5 голосов
/ 07 марта 2012

Простая концепция, однако она не работает.У меня есть две кнопки в моем UIWebView, кнопка «назад» и кнопка «вперед».Кнопки «Назад» вызывают [self.webView goBack] и вперед [self.webView goForward] .

Теперь я хочу узнать в принципе, может ли UIWebView вернуться назад.Если это так, то включите кнопку «Назад» и отпустите ее, и то же самое для кнопки «Вперед».

-(void)webViewDidStartLoad:(UIWebView *)webView
{    
    if([self.webView canGoForward]) {
        [forwardArrowBtn setEnabled:YES];
    } else {
        [forwardArrowBtn setEnabled:NO];
    }

    if([self.webView canGoBack]) {
        [backArrowBtn setEnabled:YES];
    } else {
        [backArrowBtn setEnabled:NO];
    }
}

Проблема в том, что это не работает при первой загрузке.Например: я нажимаю на ссылку внутри UIWebView, она переходит на страницу, но кнопка «Назад» по-прежнему отключена и не активируется.Только после того, как я нажму на другую ссылку, кнопка «Назад» будет включена и начнет работать.

Почему это не работает при первом переходе на другую страницу, а работает только во второй раз?

Ответы [ 4 ]

12 голосов
/ 07 марта 2012

Я решил эту проблему, поместив код установки кнопки не только в webViewDidStartLoad.Напишите метод и вызовите его из webViewDidStartLoad, webViewDidFinishLoad и shouldStartLoadWithRequest.Работает без проблем с моим приложением.

3 голосов
/ 24 апреля 2012

Является ли ваша первая страница настоящим веб-местоположением или файлом на вашем устройстве? У меня есть эта проблема, когда я начинаю с loadHTMLString, возможно потому, что на самом деле не к чему возвращаться (я предполагаю, что пользовательский интерфейс не кэширует содержимое страницы, а только ссылку на страницу). Когда я работаю с loadRequest, он работает нормально. Тем не менее, вам нужно сделать, как указано Aemsn. Хороший учебник можно найти на по этой ссылке .

1 голос
/ 07 августа 2012

Придя сюда при выполнении случайного веб-поиска, чтобы ответить на «базовый» вопрос о том, почему он работает только во второй раз:

webViewDidStartLoad вызывается до , вы фактически загружаете следующийстр.Для того, что вы делаете, webViewDidFinishLoad имеет больше смысла.Поэтому, когда вы делаете свою первую загрузку, вы не можете вернуться назад (ничего не загружено для перемотки вперед или назад).Когда вы меняете страницы в первый раз, вы все равно не можете - загружается только одна страница (текущая).Таким образом, второй раз вперед, когда это, кажется, работает.

0 голосов
/ 03 апреля 2014

У меня была точно такая же проблема, и я только что понял. Я полагаю, вы не использовали селектор webView:loadRequest: для загрузки веб-контента? Вместо этого вы, вероятно, использовали webView:loadData:MIMEType:textEncodingName:baseURL: или селектор loadHTMLString:baseURL:.

Именно это я и сделал. Если вместо этого вы используете селектор webView:loadRequest:, он будет работать - по крайней мере, для меня.

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