UIWebViewアレコレ

画面にWebページを表示するUIWebViewの使い方とテクニックのまとめ。

前提
1.InterfaceBuilderでUIWebView(Safariと似てるアイコン)を画面上に配置、delegateなど基本的な繋がりを設定
2.IBからソース上に変数を構築

『Webページの表示(画面の表示と同時に特定のページを表示させる例)』
ソースに送って定義した変数(仮に_webView)を使って、Webページを表示させるには、loadRequestを使う。

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *url = [NSString stringWithFormat:@"http://www.ayahumi.com/"];
    NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    [_webView loadRequest:request];
}

『日本語をURLに使う場合(Googleの検索結果に飛ばす場合など)』
日本語に限った話では無いと思うけど、2バイト文字は直接表示しようとしてもエラーで弾かれるので、エンコーディングをしてあげる必要がある。

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *s_word = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)@"検索文字列", NULL, CFSTR (";,/?:@&=+$#"), kCFStringEncodingUTF8);
    NSString *url = [NSString stringWithFormat:@"http://www.google.co.jp/m/search?q=%@",s_word];
    
    NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    [_webView loadRequest:request];
}

2012/3/1追記
原因は不明だけど・・・というか、おそらくバージョンによって規約が変わるせいなんだろうけど、NSStringの頭に『__bridge』を付けないとエラーになる場合があります。

    NSString *s_word = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)@"検索文字列", NULL, CFSTR (";,/?:@&=+$#"), kCFStringEncodingUTF8);

    NSString *s_word = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)@"検索文字列", NULL, CFSTR (";,/?:@&=+$#"), kCFStringEncodingUTF8);

『WebView特有の動作の取得』
ヘッダファイルの@interfaceに以下を追記

@interface WebViewController : UIViewController

@interface WebViewController : UIViewController<UIWebViewDelegate>

この追記を行うことで、Webページの読み込み中、読み込み完了、読み込みエラーの際にそれぞれ呼ばれるメソッドを実装できるようになる。

読み込み中

-(void)webViewDidStartLoad:(UIWebView *)webView

読み込み完了

-(void)webViewDidFinishLoad:(UIWebView *)webView

読み込みエラー

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

『NowLoading』
Webページの読み込みは、読み込み中は画面上に何も表示されない。
読み込み中と読み込み完了のメソッドを使えば、NowLoadingのアニメーションを上部のバーに表示することができる。

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

『小ネタ』
deallocでwebViewをreleaseする場合、以下の記述が必要らしい。

    _webView.delegate = nil;

コメントを残す

メールアドレスが公開されることはありません。