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



我正试图使后退按钮只在用户按下链接和/或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;
}

如果你没有设置web视图的委托,shouldStartLoadWithRequest()将不会被调用。

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

IBOutlet  UIWebView*    webView;

webView有一个委托属性需要设置到你的视图控制器,你可以在storyboard中设置委托,但在代码中设置更显式:

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

99%的情况下你只需要设置委托,但是UIWebView的委托很有趣它需要在完成时设置为nil。所以加上这个:

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

UIWebViewWKWebView都具有canGoBackcanGoForward性质。您可以使用KVO查看这些按钮何时启用,并相应地启用/禁用后退和前进按钮。

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

最新更新