アプリ申請において、ブラウザは注意が必要なので調べてみました。幾つかやり方があるようです。
UIApplication クラスを使って Safari に頼む
Safari に代行してもらうという安易ですが安全かもしれない方法です。
アプリからちょっとWeb アクセスしたいだけなのに、「戻る」だの、「ダウンロード中」の表示だの考えなくていいので簡単です。
その辺適当にやると Apple から Regect くらうそうです。
UIApplicationクラスを使います
| [[UIApplication sharedApplication] openURL:url]; |
ViewController.m
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 適当な URL を入れる NSString *webPage = @"http://www.apple.com/iphone/"; NSURL *url = [NSURL URLWithString:webPage]; [[UIApplication sharedApplication] openURL:url]; } @end |
コードはこれだけです。
ただし、Safari で Web に移動した後は、自分のアプリにはもどれません。
UIWebView クラスを使う
こちらも UIWebView をつかえば簡単にブラウザはできます。
UIWebViewDelegate をセットします。
ViewController.h
|
1 2 3 4 5 |
#import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIWebViewDelegate> @end |
ViewController.m
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // UIWebViewのインスタンス初期化 UIWebView *webView = [[UIWebView alloc]init]; // デリゲート webView.delegate = self; // Webページの大きさを画面に合わせる CGRect rect = self.view.frame; webView.frame = rect; webView.scalesPageToFit = YES; // インスタンスをビューに追加する [self.view addSubview:webView]; // URLを指定 NSURL *url = [NSURL URLWithString:@"http://www.apple.com/iphone/"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; // リクエストを投げる [webView loadRequest:request]; } // ロード時にインジケータをまわす - (void)webViewDidStartLoad:(UIWebView*)webView { [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; } // ロード完了で非表示 - (void)webViewDidFinishLoad:(UIWebView*)webView { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; } @end |
これで、ビルドして実行すれば、指定のURLにとびます。
インジケーターを使うところは、アプリを申請するなら必須でしょう。
コードで全て書いているので、「戻る」や「リロード」ボタンを入れたいのであれば
Storyboard との連携が素直なアプローチ
Storyboard を使ったブラウザ
ナビゲーションバーとバーボタンで
「戻る」や「リロード」を入れたいと思います。
Web View を画面いっぱいにのせます。
Navigation bar を Web View の上に配置する
その Navigation Bar に Bar Button を2つ左右に置く
Bar Button の右側を選択して
インスペクターの Attributes にある Identifier を
Custom から Refresh に設定する
同様に、もう一つは Rewind とする
このような配置となります。
コードを多少修正が必要です
ViewController.h
|
1 2 3 4 5 6 7 |
#import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIWebViewDelegate> @property IBOutlet UIWebView *webView; @end |
ViewController.m
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // デリゲート self.webView.delegate = self; // URLを指定 NSURL *url = [NSURL URLWithString:@"https://akira-watson.com/iphone"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; // リクエストを投げる [self.webView loadRequest:request]; } // ロード時にインジケータをまわす - (void)webViewDidStartLoad:(UIWebView*)webView { [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; } // ロード完了で非表示 - (void)webViewDidFinishLoad:(UIWebView*)webView { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end |
ビルドして実行すると