Отключить кнопку «Назад» и «Вперед» на UIToolBar в UIWebview - PullRequest
8 голосов
/ 23 февраля 2010

я новичок в iphone. я хочу отключить кнопки «Назад» (кнопка со стрелкой влево) и «Вперед» (кнопка со стрелкой вправо) на UIToolBar в UIWebView. После перемещения веб-страницы хотите включить кнопку «Назад», а затем кнопку «Вперед» хотите включить, когда это необходимо. В моем приложении я использую панель инструментов в нижней части через конструктор интерфейса. Пожалуйста, помогите мне!

Ответы [ 5 ]

28 голосов
/ 23 февраля 2010

Отправьте следующее сообщение объекту кнопки для включения / выключения:

// Enable 
[myButton setEnabled:YES];

// Disable
[myButton setEnabled:NO];

Чтобы определить, следует ли показывать эти кнопки, вы должны проверить следующие свойства в веб-представлении:

[myWebView canGoBack];
[myWebView canGoForward];

Вы захотите проверить это всякий раз, когда пользователь загружает страницу. Для этого необходимо реализовать метод UIWebViewDelegate webViewDidFinishLoad:

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
  // Enable or disable back
  [myBackButton setEnabled:[myWebView canGoBack]];

  // Enable or disable forward
  [myForwardButton setEnabled:[myWebView canGoForward]];

 }
4 голосов
/ 23 сентября 2013

Просто внедрите в один из делегатов метод webView.

- (void)webViewDidFinishLoad:(UIWebView *)webView
{

    if ([webView canGoBack])
        [backbutton setEnabled:YES];
    else
        [backbutton setEnabled:NO];

    if ([webView canGoForward])
        [fwdbutton setEnabled:YES];
    else
        [fwdbutton setEnabled:NO];
}
2 голосов
/ 30 декабря 2015

Кроме ответа Феликса, мне пришлось внести следующее изменение, чтобы отключить кнопку «Назад» при переходе на первую страницу и кнопку «Вперед» при переходе на последнюю страницу.

Добавлен наблюдатель в WebHistoryItemChangedNotification.

 [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(webViewHistoryDidChange:)
                                             name:@"WebHistoryItemChangedNotification"
                                           object:nil];

Обновление состояний кнопок в webViewHistoryDidChange.

- (void)webViewHistoryDidChange
{
    if ([theWebView canGoBack])
    {
       self.backButton.enabled = YES;
    }
    else
    {
       self.backButton.enabled = NO;
    }
    if ([theWebView canGoForward])
    {
       self.forwardButton.enabled = YES;
    }
    else
    {
       self.forwardButton.enabled = NO;
    }
}

См .: То же самое ответили здесь

1 голос
/ 05 октября 2018

Для разработчиков, которые пытаются решить эту проблему в WKWebView, вам нужно реализовать KVO для наблюдения canGoBack и canGoForward свойств WKWebView в методе viewDidLoad.

webView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoBack), options: .new, context: nil)
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoForward), options: .new, context: nil)

А в методе наблюдателя

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == #keyPath(WKWebView.canGoBack) || keyPath == #keyPath(WKWebView.canGoForward) {
              backButton.isEnabled = webView.canGoBack
              forwardButton.isEnabled = webView.canGoForward
        }
    }

Кроме того, не забудьте удалить наблюдателя, когда ViewController освобождается.

0 голосов
/ 22 июня 2017

Двухлинейное решение для Swift:

func webViewDidFinishLoad(_ webView: UIWebView) {
    btnBack.isEnabled = webView.canGoBack
    btnForward.isEnabled = webView.canGoForward
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...