2012年2月12日日曜日

androidのWebViewからiphonのUIWebViewへの移植 その3

前回はandroidのwebViewを利用してHTMLをロードする方法を学びました。
今回はiphoneのUIWebViewを使った画面表示のソースを以下に示します。

sample1. UIWebView source code objective-C interface(ios4)

#import <Foundation/Foundation.h>

//  WEBHTML アプリについて
static NSInteger const ABOUT_APP = 1;
//  WEBHTML アプリについて タイトル
static NSString *const ABOUT_APP_ITEM_NAME = @"アプリについて";

@interface WebViewController : UIViewController<UIWebViewDelegate> {
 @private
  NSInteger webDisp_;
  UIWebView *webView_;
  NSString *pathForResource_;
}

@property(nonatomic, assign)NSInteger webDisp;
@property(nonatomic, retain)UIWebView *webView;
@property(nonatomic, retain)NSString *pathForResource;

- (void)cancel;

@end

sample2. UIWebView source code objective-C implementation(ios4)

#import WebViewController.h"


@implementation WebViewController
@synthesize webDisp = webDisp_;
@synthesize webView = webView_;
@synthesize pathForResource = pathForResource_;

- (void)cancel {
    NSLog(@"%s", __func__);
    [self dismissModalViewControllerAnimated:YES];
}

- (void)viewDidLoad {
    NSLog(@"%s", __func__);

    if (ABOUT_APP == webDisp_) {
        self.title = ABOUT_APP_ITEM_NAME;
        self.pathForResource = @"about_app";
    } 

    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)];

    self.navigationItem.backBarButtonItem = leftButton;
    [leftButton release];

    self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    self.webView.scalesPageToFit = YES;

    self.webView.delegate = self;
    [self.view addSubview:self.webView];

    NSString *path = [[NSBundle mainBundle] pathForResource:pathForResource_ ofType:@"html"];
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]];
 
    [super viewDidLoad];
}

- (void)webViewDidStartLoad:(UIWebView*)webView {
    NSLog(@"%s", __func__);
    // ページ読込開始時にインジケータをくるくるさせる
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)webViewDidFinishLoad:(UIWebView*)webView {
    NSLog(@"%s", __func__);
    // ページ読込完了時にインジケータを非表示にする
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"%s", __func__);
    // 読み込みに失敗した場合は前のページに戻る
    [self dismissModalViewControllerAnimated:YES];
}

- (void)viewDidUnload {
    webView_.delegate = nil;
    [webView_ release], webView_ = nil;
    [pathForResource_ release], pathForResource_ = nil;
    [super viewDidUnload];
}

- (void)dealloc {
    webView_.delegate = nil;
    [webView_ release], webView_ = nil;
    [pathForResource_ release], pathForResource_ = nil;
    [super dealloc];
}

@end

大切なことは、webView_をreleaseする時は、delegateにnilをセットする必要があることです。
htmlはResourcesフォルダ配下に設定します。ここでは、about_app.htmlというHTMLファイルを設定しています。
サーバー側において呼び出す場合は、通信エラー処理も追加しましょう。エラーメッセージはalertで表示するのがiphoneコーディングの流儀です。

このソースをコンパイルして実行すると、以下のような画面が表示されます。

図1.アプリについて画面(iphone)

ナビゲーションバーの下にロードしたHTMLが表示されています。

以上で移植作業は完了になります。
一度慣れてしまえば、HTML共通化コーディングはアプリ作成作業をとても楽にします。
開発者のみなさんが、楽しい開発ライフを送って定時で帰宅できることを祈ってます。
でわ。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...