6

現在、UIWebView を使用して iOS 用のアプリをプログラミングしています。私の目標は、WebView を使用して (Web サーバーから) PHP サイトを表示することです。HTMl、CSS、JS、PHP はかなり得意ですが、Object C は得意ではありません。しかし、私はすべてを実装することができました.私の目標は、エラーアラートの後にサーバー上のファイルではなくローカルファイルを表示することです(iOSがインターネットに接続していない場合)。Google を使用した後、私は独立してそれを行うことができましたが、フォールバックとしてではありませんでした.

現在、アラートが表示されていますが、[OK] をタップすると、ユーザーは空白のページを取得します。あまりユーザーフレンドリーではありません:(ローカルのhtmlファイルに、一種の「更新ボタン」を実装できました。(より良い?)解決策があれば、とてもうれしいです。ありがとう!

私のシステム: OS X 10.8.2 上の Xcode 4.5.1

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
4

1 に答える 1

2

次の UIAlertViewDelegate メソッドを実装できます。

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

このメソッドは、alertView が閉じられたときに呼び出されるため、このメソッドの本体でローカル リソースをフォールバックとして読み込むことができます。

ViewController のインターフェースに次を追加する必要があります。

@interface ViewController : UIViewController <UIWebViewDelegate,UIAlertViewDelegate>

そして、alertView を割り当てるときに、デリゲートを自分自身に設定します。

私はこれを意味しました:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Keine Internetverbindung" message:@"Bitte verbinde dich mit dem Internet." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
于 2012-10-15T14:42:25.210 に答える