2012-10-15 12 views
6

Obecnie programuję aplikację na iOS przy użyciu interfejsu UIWebView. Moim celem jest wyświetlenie strony php (z mojego serwera) przy użyciu WebView. Jestem całkiem niezły z HTMl, CSS, JS i PHP, ale Object C nie jest moją siłą. Jednak udało mi się zaimplementować wszystko, a moim celem jest teraz (gdy iOS nie ma połączenia z Internetem), aby wyświetlić plik lokalny zamiast pliku na serwerze po powiadomieniu o błędzie. Po skorzystaniu z Google udało mi się zrobić to samodzielnie, ale nie jako awarię.Xcode i WebView: Załaduj lokalny html, jeśli nie ma połączenia z Internetem (awaryjne)

Teraz wyświetla alert, ale po dotknięciu ok użytkownik otrzymuje pustą stronę. Niezbyt przyjazny dla użytkownika :(W lokalnym pliku html mógłbym wprowadzić pewien rodzaj "przycisku odświeżania". Byłbym bardzo szczęśliwy, gdybyś miał (lepsze?) Rozwiązanie. Dzięki!

Mój system: Xcode 4.5. 1 OS X 10.8.2 na

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController <UIWebViewDelegate> 
@property (strong, nonatomic) IBOutlet UIWebView *webView; 
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *loadingSign; 
- (void)loadSite; 

@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize webView; 
@synthesize loadingSign; 

-(void) webViewDidStartLoad:(UIWebView *)webView { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    [self.loadingSign startAnimating]; 
    self.loadingSign.hidden = NO; 
} 

-(void) webViewDidFinishLoad:(UIWebView *)webView { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
    [self.loadingSign stopAnimating]; 
    self.loadingSign.hidden = YES; 
} 

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { 
    [self.loadingSign stopAnimating]; 
    self.loadingSign.hidden = YES; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Keine Internetverbindung" message:@"Bitte verbinde dich mit dem Internet." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
} 

- (void)loadSite 
{ 
    NSString *fullURL = @"http://website.com"; 
    NSURL *url = [NSURL URLWithString:fullURL]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:requestObj]; 
    webView.scrollView.bounces = NO; 
    webView.delegate = self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [self loadSite]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 
+0

obciążenia lokalnego html gdy błąd zdarza się (trzeba sprawdzić, dlaczego jest błąd) od - (void) Webview: (UIWebView *) Webview didFailLoadWithError: (NSError *) Błąd – Vjy

Odpowiedz

2

można realizować w następujący sposób:

0 UIAlertViewDelegate
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 

Ta metoda jest wywoływana, gdy alertView jest odrzucany, więc w jego ciele można załadować lokalne zasoby jako awarię.

w interfejs swojego ViewController należy dodać:

@interface ViewController : UIViewController <UIWebViewDelegate,UIAlertViewDelegate> 

a kiedy Alloc Twój alertView ustawić delegata do siebie.

miałem na myśli to:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Keine Internetverbindung" message:@"Bitte verbinde dich mit dem Internet." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
+0

Dziękujemy za szybkie rozwiązanie. Działa idealnie. Ale nie rozumiem twojej ostatniej frazy ... – ohh2ahh

Powiązane problemy