この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
iOS 9 で追加された SFSafariViewController について調べてみたので紹介します。
特徴
SFSafariViewController はウェブページを表示するための View Controller です。
- Safari のような UI を使用できる
- ツールバー
- ページロード中のプログレス表示
- SSL暗号化通信の時にアドレスバーに鍵アイコンが表示される
- Safari の機能を使用できる
- Safari AutoFill (クレジットカード、パスワード、連絡先)
- Safari Reader
- Content Blocking
- クッキーなどのデータを Safari と共有できる
- 広告トラッキングなどの目的でアプリ初回起動直後にSafariに飛ばす必要がなくなる
- 提供されるメソッド・プロパティは少ない
- UIKit の UIImagePickerController を使うときのようなお手軽さ
- ウェブページを全面表示するのに適している
SFSafariViewController
- 定義されているメソッドはイニシャライザのみ、プロパティは1つ
@property (nonatomic, weak, nullable) id delegate;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE;
- (instancetype)initWithURL:(NSURL *)URL entersReaderIfAvailable:(BOOL)entersReaderIfAvailable NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithURL:(NSURL *)URL;
SFSafariViewControllerDelegate
- 定義されているメソッドは2つ
- UIActivity 関連のメソッド
- 「Done」ボタンを押した際に呼ばれるメソッド
- (NSArray *)safariViewController:(SFSafariViewController *)controller activityItemsForURL:(NSURL *)URL title:(nullable NSString *)title;
- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller;
サンプルコード
SafariServices フレームワークをインポートして、SFSafariViewController のインスタンスを作成して、表示するだけです。
クラスを SFSafariViewControllerDelegate に適合させて、safariViewControllerDidFinish メソッドを実装すると、SFSafariViewController 上の Done ボタンのタップを検知できます。
#import "ViewController.h"
@import SafariServices;
@interface ViewController ()
@end
@implementation ViewController
- (IBAction)buttonDidTouchUpInside:(id)sender
{
SFSafariViewController *safariViewController =
[[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:@"https://classmethod.jp/"]];
[self presentViewController:safariViewController
animated:YES
completion:nil];
safariViewController.delegate = self;
}
- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller
{
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
まとめ
以上のように、SFSafariViewController はコードを数行書くだけで使用できます。単にウェブページを表示したい場合であれば、UIWebView や WKWebView を使用するよりもかなり楽です。活用していきたいです。