UIWebView canGoBack和canGoForward总是返回NO

我想直接加载数据到UIWebView

 [webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:nil]; 

数据是一些htmlstring包含一些外部链接。 我想基于UIWebView属性启用后退和前进button:

 self.forwardBtn.enabled = self.webView.canGoForward; self.backBtn.enabled = self.webView.canGoBack; 

但是,即使在初始加载之后在Web视图中单击不同的链接之后, webView.canGoForwardwebView.canGoBack总是返回NO

任何想法呢?

好吧,我认为问题是如果我使用loadData或loadHTMLString,然后检查委托中的请求的url:

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSLog(@"url=%@", [request URL]); return YES; } 

这似乎是url是空的。 我想这就是为什么在使用loadData的时候没有goBack的历史。

简单快速的解决scheme,将条形button项目拖放到xib,设置图像,并从属性检查器中取消勾选启用框。

 // WebViewController.h @interface WebViewController : UIViewController <UIWebViewDelegate, UIAlertViewDelegate> @property (weak, nonatomic) IBOutlet UIWebView *webView; @property (weak, nonatomic) IBOutlet UIBarButtonItem *goBack; @property (weak, nonatomic) IBOutlet UIBarButtonItem *goForward; @property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator; // WebViewController.m - (void)viewDidLoad { [super viewDidLoad]; if ([ReachabilityTest networkConnected] == YES) { [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.urlString]]]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection!" message:@"Please, make sure you have internet connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alert show]; } } - (void)webViewDidStartLoad:(UIWebView *)_webView { [self.activityIndicator startAnimating]; } - (void)webViewDidFinishLoad:(UIWebView *)_webView { [self.activityIndicator stopAnimating]; self.goBack.enabled = [self.webView canGoBack]; self.goForward.enabled = [self.webView canGoForward]; } 

使用我的代码,我使用这个代码为我的自定义web视图。 这不是你的问题的完美答案,但它会有所帮助。 对不起格式:)

 - (IBAction)backwordButton:(id)sender { [webViewOutlet goBack];} - (IBAction)forwordButton:(id)sender { [webViewOutlet goForward]; } - (IBAction)stopButton:(id)sender { [webViewOutlet stopLoading]; } - (IBAction)refreshButton:(id)sender { [webViewOutlet reload]; } - (IBAction)backButton:(id)sender { [self.navigationController popViewControllerAnimated:YES]; } - (void)viewWillAppear:(BOOL)animated { UIImage *goBackImageChange = [UIImage imageNamed:@"browserBackInactive@2x.png"]; [goback setBackgroundImage:goBackImageChange forState:UIControlStateNormal]; UIImage *goForwordImageChange = [UIImage imageNamed:@"browserForwardInactive@2x.png"]; [goforowrd setBackgroundImage:goForwordImageChange forState:UIControlStateNormal]; NSURL *urlToLoad = [[NSUserDefaults standardUserDefaults] URLForKey:@"URLToLoad"]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:urlToLoad]; [webViewOutlet loadRequest:requestObj]; } - (void)webViewDidStartLoad:(UIWebView *)webView { activityIndicator.hidden = NO; [activityIndicator startAnimating]; } - (void)webViewDidFinishLoad:(UIWebView *)webView { BOOL ableToGoBack = [webViewOutlet canGoBack]; BOOL ableToGoForword = [webViewOutlet canGoForward]; if (ableToGoBack == YES) { UIImage *goBackImageChange = [UIImage imageNamed:@"browserBack@2x.png"]; [goback setBackgroundImage:goBackImageChange forState:UIControlStateNormal]; } else { UIImage *goBackImageChange = [UIImage imageNamed:@"browserBackInactive@2x.png"]; [goback setBackgroundImage:goBackImageChange forState:UIControlStateNormal]; } if (ableToGoForword == YES) { UIImage *goForwordImageChange = [UIImage imageNamed:@"browserForward@2x.png"]; [goforowrd setBackgroundImage:goForwordImageChange forState:UIControlStateNormal]; } else { UIImage *goForwordImageChange = [UIImage imageNamed:@"browserForwardInactive@2x.png"]; [goforowrd setBackgroundImage:goForwordImageChange forState:UIControlStateNormal]; } [activityIndicator stopAnimating]; activityIndicator.hidden = YES; }