iOS - проблемы с canGoForward и canGoBack в webViewDidStartLoad
Простая концепция, однако она не работает. У меня есть две кнопки в моем 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 ответа
Я решил эту проблему, поместив код установки кнопки не только в webViewDidStartLoad. Напишите метод и вызовите его из webViewDidStartLoad, webViewDidFinishLoad и shouldStartLoadWithRequest. Работает безупречно с моим приложением.
Является ли ваша первая страница настоящим веб-местоположением или файлом на вашем устройстве? У меня есть эта проблема, когда я начинаю с loadHTMLString, возможно потому, что на самом деле не к чему возвращаться (я предполагаю, что пользовательский интерфейс не кэширует содержимое страницы, а только ссылку на страницу). Когда я работаю с loadRequest, он работает нормально. Тем не менее, вам нужно сделать, как сказал Aemsn. Хороший учебник можно найти по этой ссылке.
Придя сюда во время случайного поиска в Интернете, чтобы ответить на "базовый" вопрос о том, почему он работает только во второй раз:
webViewDidStartLoad вызывается до того, как вы действительно загрузите следующую страницу. Для того, что вы делаете, webViewDidFinishLoad имеет больше смысла. Поэтому, когда вы делаете свою первую загрузку, вы не можете вернуться назад (ничего не загружено для перемотки вперед или назад). Когда вы меняете страницы в первый раз, вы все равно не можете - загружается только одна страница (текущая). Таким образом, второй раз вперед, когда кажется, что работает.
У меня была точно такая же проблема, и я только что понял. Я полагаю, вы не использовали webView:loadRequest:
селектор для загрузки веб-контента? Вместо этого вы, вероятно, использовалиwebView:loadData:MIMEType:textEncodingName:baseURL:
или loadHTMLString:baseURL:
селектор.
Это именно то, что я сделал. Если вы используете webView:loadRequest:
вместо этого, он будет работать - по крайней мере, он сделал для меня.