Iphone 禁用UIWebview中UIToolBar上的“后退”和“前进”按钮

Iphone 禁用UIWebview中UIToolBar上的“后退”和“前进”按钮,iphone,uiwebview,Iphone,Uiwebview,我不熟悉iphone。我想在UIWebView中禁用UIToolBar上的后退(左箭头按钮)和前进(右箭头按钮)按钮。移动网页后要启用后退按钮,然后在需要时启用前进按钮。在我的应用程序中,我通过界面生成器使用底部的工具栏。请任何人帮帮我 向按钮对象发送以下消息以启用/禁用: // Enable [myButton setEnabled:YES]; // Disable [myButton setEnabled:NO]; 要确定是否应显示这些按钮,应检查webview上的以下属性: [myW

我不熟悉iphone。我想在UIWebView中禁用UIToolBar上的后退(左箭头按钮)和前进(右箭头按钮)按钮。移动网页后要启用后退按钮,然后在需要时启用前进按钮。在我的应用程序中,我通过界面生成器使用底部的工具栏。请任何人帮帮我

向按钮对象发送以下消息以启用/禁用:

// Enable 
[myButton setEnabled:YES];

// Disable
[myButton setEnabled:NO];
要确定是否应显示这些按钮,应检查webview上的以下属性:

[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]];

 }

只需在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];
}

除了pheelicks的回答之外,我还必须做以下更改,当您返回到第一页时禁用后退按钮,当您转到最后一页时禁用前进按钮

在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;
    }
}

请参阅:

Swift的双衬里解决方案:

func webViewDidFinishLoad(_ webView: UIWebView) {
    btnBack.isEnabled = webView.canGoBack
    btnForward.isEnabled = webView.canGoForward
}

对于在
WKWebView
中努力解决此问题的开发人员,您需要实现KVO以观察
viewDidLoad
方法中
canGoBack
canGoForward
WKWebView
属性

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时,不要忘记删除观察者。

非常感谢。不是现有的最干净的解决方案。但肯定工作得很好!!!