如何仅在我的 UIWebView 中单击 link 时启用我的后退按钮? (代码不会执行)

How do I enable my back button only when a link is clicked in my UIWebView? (Code won't execute)

我正在努力使后退按钮仅在用户按下 link and/or if canGoBack = TRUE 时启用。我尝试在正文中使用 if 语句,但这没有用。然后我尝试使用我可以在网上找到的东西,但它仍然没有用。我的代码如下。我究竟做错了什么?谢谢!

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:    (NSURLRequest *)request navigationType:      (UIWebViewNavigationType)navigationType{
    if (navigationType == UIWebViewNavigationTypeLinkClicked)
    {
        NSString *url = webView.request.URL.absoluteString;
        NSURL *nsurl = [NSURL URLWithString:url];
        NSURLRequest *nsrequest = [NSURLRequest requestWithURL:nsurl];
        [webView loadRequest:nsrequest];
        backButton.enabled = TRUE;
    }
    return TRUE;
}

UIWebViewWKWebView 上面都有 canGoBackcanGoForward 属性。您可以使用 KVO 查看这些功能何时启用,并相应地 enable/disable 您的后退和前进按钮。

http://nshipster.com/key-value-observing/

如果您尚未设置 Web 视图的委托,则不会调用 shouldStartLoadWithRequest()。

为了使用 UIWebView,它通常设置为视图控制器的出口 属性,所以您应该有这样的东西:

IBOutlet  UIWebView*    webView;

webView 有一个委托 属性 需要设置到您的视图控制器,您可以在故事板中设置委托,但在代码中设置它更明确:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.webView.delegate = self;

99% 的时间你只是设置委托,但 UIWebView 的委托很有趣,因为它需要在完成后设置为 nil。所以添加:

- (void)viewDidUnload
{
    [self.webView stopLoading];
    self.webView.delegate = nil;