2012-01-10 34 views
2

我試圖直接將數據加載到UIWebViewUIWebView的canGoBack和canGoForward總是返回NO

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

的數據是一些HTML字符串中包含一些外部鏈接。我試圖使在UIWebView性質的前進和後退按鈕基地:

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

不過,我點擊即使在初始加載後在Web視圖不同環節,webView.canGoForwardwebView.canGoBack總是返回NO

對此有何想法?

回答

4

好吧,我認爲這個問題是如果我使用loadData或loadHTMLString,然後我檢查的委託請求的URL:

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

好像是網址爲空。 我想這就是爲什麼在使用loadData時沒有goBack的歷史記錄。

0

使用我的代碼,我使用此代碼爲我的自定義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:@"[email protected]"]; 
    [goback setBackgroundImage:goBackImageChange forState:UIControlStateNormal]; 

    UIImage *goForwordImageChange = [UIImage imageNamed:@"[email protected]"]; 
    [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:@"[email protected]"]; 
     [goback setBackgroundImage:goBackImageChange forState:UIControlStateNormal]; 
    } else { 
     UIImage *goBackImageChange = [UIImage imageNamed:@"[email protected]"]; 
     [goback setBackgroundImage:goBackImageChange forState:UIControlStateNormal]; 
    } 
    if (ableToGoForword == YES) { 
     UIImage *goForwordImageChange = [UIImage imageNamed:@"[email protected]"]; 
     [goforowrd setBackgroundImage:goForwordImageChange forState:UIControlStateNormal]; 
    } else { 
     UIImage *goForwordImageChange = [UIImage imageNamed:@"[email protected]"]; 
     [goforowrd setBackgroundImage:goForwordImageChange forState:UIControlStateNormal]; 
    } 

    [activityIndicator stopAnimating]; 
    activityIndicator.hidden = YES; 
} 
+0

感謝您的回答。但是,我正在使用導致此問題的「[webView loadData]」。使用「[webView loadRequest]」將始終有效。 – evanwong 2012-01-12 19:42:33

+2

您不會在代碼中添加@ 2x,只能在您的文件名中告訴xcode取而代之爲視網膜顯示文件。只是說;) – emotality 2013-06-04 14:00:16

1

簡單快速的解決方案,將條形按鈕項目拖放到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]; 
} 
+0

在webViewDidFinishLoad中添加代碼:(UIWebView *)_webView爲我解決了這個問題。 – Sawsan 2015-02-03 13:35:20