swift:SafariWebViewControllerを使ってみました
概要
iOS 9: Getting Started With SFSafariViewController - Envato Tuts+ Code Tutorialを参考に、SafariViewControllerを使ってみました。SafariViewControllerは、iOS9で導入されたUIコントロールです。WebViewより簡単にアプリの中に、しかもSafariの全機能を持つWeb閲覧機能を組み込むことができるようになります。
WebView機能
アプリにWeb閲覧機能を組み込む方法です。
- Safariアプリと連携する方法
- WebViewを使う方法
- SafariViewControllerを使う方法
SafariViewControllerを使うサンプルアプリを作成しました。ボタンをタップするとGoogle検索画面をオープンします。
Safariアプリ連携
関連づけられたアプリ(Safari)でURLをオープンします。
ボタン押下イベントに以下の処理を追加するだけです。
@IBAction func openInSafari(sender: UIButton) { let url = NSURL(string: self.urlString)! UIApplication.sharedApplication().openURL(url) }
アプリの切り替えが行われるため、SafariアプリでどのURLにアクセスしているかをアプリでは知ることができません。
WebViewを使う方法
どのURLにアクセスしたかをアプリで知ることはできますが、Safariでの履歴や機能が使えるわけではありません。また、画面遷移するための処理が必要になります。
SafariViewControllerを使う方法
SafariViewControllerを使うためには、ボタン押下時に、SafariViewControllerを開きます。Safariのイベントは、SFSafariViewControllerDelegateのメソッドで取得します。
class ViewController: UIViewController, SFSafariViewControllerDelegate { private var urlString:String = "https://google.com" // 最初に設定したURLがロードされた時に呼ばれる func safariViewController(controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) { print("safariViewController") } // ユーザーが「完了(Done)」をタップした時に呼ばれる func safariViewControllerDidFinish(controller: SFSafariViewController) { print("safariViewControllerDidFinish") controller.dismissViewControllerAnimated(true, completion: nil) } }
SafariViewControllerを使うと、Safariの全機能が使えます。さらに、SFSafariViewControllerDelegateを実装することによって Safariでの操作履歴も取得することができます。