menu
書いてる野郎
orebike@gmail.com
//オブジェクト作成 UIWebView* webView = [[UIWebView alloc]] init]; //大きさと位置決定 webView.frame = CGRectMake(0, 0, 300, 400); //画面のどこかにはっつける [ hogeView addSubView: webView ];
埋め込んだ状態で、loadRequest
メソッドを使う
NSURL* url = [ NSURL URLWithString:@"http://www.hogehoge.co.jp/" ]; NSURLRequest* request = [ NSURLRequest requestWithURL:url ]; [ webView loadRequest:request ];
埋め込んだ状態で、URLを読みこむと同様にloadRequest
メソッドを使う
NSString* fileName = @"hogehoge.html"; NSString* filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"html"]; NSURLRequest* request = [ NSURLRequest requestWithURL:[ NSURL fileURLWithPath:filePath ] ]; [ webView loadRequest:request ];
NSString* html = @"<html><head></head><body>hoge</body></html>"; NSString* fileName = @"hogehoge.html"; NSString* filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"html"]; [ webView loadHTMLString:html baseURL:[ NSURL: fileURLWithPath:filePath ] ];
baseURLのセレクタの部分で変なことをしているが、 ここにそれっぽい値が入ってないとJavaScriptによっては正常に作動しない可能性がある。
サンプルではよくnilを突っ込んでるが、一部のJavaScriptが動作しなかった。
単にUIWebViewを作って張ってURLをぶち込んだだけだと表示しかできず、別に何をクリックしても何も動かない。 動かすためにはプロトコルUIWebViewDelegateを実装したオブジェクトをUIWebViewのdelegateに取り込む必要がある。
UIWebViewDelegate Protocol Reference
適当なクラスにUIWebViewDelegateプロトコルをくっつけて
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error; - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; - (void)webViewDidFinishLoad:(UIWebView *)webView; - (void)webViewDidStartLoad:(UIWebView *)webView;
の4つのメソッドを実装すればよい。
実装したクラスからallocしてオブジェクトを作り、本体にぶち込んでやればよい
[ webView setDelegate:hoge ];
リンクをクリックするととwebView:shouldStartLoadWithRequest:navigationTypeメソッドが呼ばれる・・・ってか、Objective-Cのメソッドは長すぎて記述性とか可読性が著しく低くなるな・・・
なのでこれを実装する。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if(navigationType == UIWebViewNavigationTypeLinkClicked){ //クリックで発生したリクエストならば・・・ //safariで開くよ [[UIApplication sharedApplication] openURL:[request URL]]; return NO; //safariで開いたから内部では遷移しないよ //このメソッドは最初のこちらから指定するURLでの読み込みに対しても呼び出される。 } return YES; }
このメソッドはYESを返すとUIWebView内部で遷移し、NOを返すと何もしないという挙動になる。 引数から状況がわかるので分岐してコントロールする
2012-03-09 新規