在UIWebview中禁用UIToolBar上的返回和前进按钮

9

我是新手,想要在UIWebView的UIToolBar上禁用“返回”(左箭头按钮)和“前进”(右箭头按钮)按钮。在移动网页后,希望启用“返回”按钮,然后需要时再启用“前进”按钮。在我的应用程序中,我通过界面生成器在底部使用工具栏。请有人帮助我!

5个回答

28

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

// Enable 
[myButton setEnabled:YES];

// Disable
[myButton setEnabled:NO];

为了确定是否应该显示这些按钮,您需要在Web视图上检查以下属性:

[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
只需要在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

对于那些在WKWebView中遇到问题的开发者,你需要在viewDidLoad方法中实现KVO来观察WKWebViewcanGoBackcanGoForward属性。

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被释放时移除观察者。

2

除了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;
    }
}

参考链接:这里已经有答案了


非常感谢。 虽然不是最干净的解决方案,但绝对运行良好!!! - touti

0
一种简洁的 Swift 两行代码解决方案:
func webViewDidFinishLoad(_ webView: UIWebView) {
    btnBack.isEnabled = webView.canGoBack
    btnForward.isEnabled = webView.canGoForward
}

对我来说,canGoForward 总是返回 false,你可以帮帮我吗? - Yogesh Patel
除非您正在导航的页面具有哈希样式导航或类似功能,否则在导航返回一级时应返回false。为确保正确性,请尝试使用另一个网站。 - JoeGalind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接