2012-01-10 3 views
2

Я пытаюсь загрузить данные непосредственно в UIWebView:UIWebView 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; 

Однако, даже после того, как я нажал на различные ссылки в веб-просмотра после начальной загрузки, то webView.canGoForward и webView.canGoBack всегда возвращаются NO.

Есть идеи по этому вопросу?

ответ

4

Хорошо, я думаю, что проблема в том, если я использую LoadData или loadHTMLString, а потом проверить URL запроса в делегат:

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

Похоже, что url пуст. Я думаю, именно поэтому нет истории для goBack при использовании loadData.

0

Используйте мой код, я использую этот код для своего пользовательского веб-просмотра. Это не идеальный ответ на ваш вопрос, но это поможет. Извините за форматирование :)

- (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

+2

Вы не должны добавлять @ 2x в свой код, только в имени вашего файла, чтобы сообщить xcode скорее получить этот файл для отображения сетчатки. Просто скажите;) – emotality

1

Простое быстрое решение, перетащите элементы панели управления в xib, установите изображение и откройте окно Enabled от инспектора атрибутов.

// 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