代码之家  ›  专栏  ›  技术社区  ›  Sivanathan

禁用uiWebView中ui工具栏上的后退和前进按钮

  •  8
  • Sivanathan  · 技术社区  · 15 年前

    我刚接触过iPhone。我想禁用uiWebView中ui工具栏上的后退(左箭头按钮)和前进(右箭头按钮)按钮。移动后网页要启用后退按钮,然后在需要时启用前进按钮。在我的应用程序中,我通过InterfaceBuilder使用底部的工具栏。请任何人帮助我!

    5 回复  |  直到 6 年前
        1
  •  28
  •   Stefan Arentz    13 年前

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

    // 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]];
    
     }
    
        2
  •  4
  •   James Zaghini Gandalf    10 年前

    只需在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];
    }
    
        3
  •  1
  •   Community CDub    8 年前

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

    参考: Same is answered here

        4
  •  1
  •   Vineeth    6 年前

    对于那些在 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时,不要忘记移除观察者。

        5
  •  0
  •   JoeGalind    8 年前

    Swift的两行解决方案:

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