対象:
Swift3

iOS 9以降で使えるSFSafariViewControllerでWebページを表示する(Swift)

iOS 9から新たにSFSafariViewControllerが導入された。SFSafariViewControllerを使うためには、SafariServicesをimportする必要がある。

以下のshowSafariメソッドはボタンのTouch Downイベントに接続したメソッドである。ボタンを押下するとSFSafariViewControllerが開く。iPhone 6s等対応機種であれば、SFSafariViewControllerは何もしなくても3D TouchによるPeek & Popが使える。また、SFSafariViewControllerは"完了"をタップすれば元のアプリに戻ることができる。

import UIKit
import SafariServices

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func showSafari(_ sender: AnyObject) {
        let url = NSURL(string: "http://www.office-matsunaga.biz/ios/list.php")!
        // entersReaderIfAvailableをtrueにすると、可能なら自動的にリーダー表示する
        let webView = SFSafariViewController(url: url/*, entersReaderIfAvailable: true*/)
        present(webView, animated: true, completion: nil)
    }
}

また、SFSafariViewControllerでhttp通信の状況等を確認したいなら、まずViewControllerでSFSafariViewControllerDelegateを継承する。

class ViewController: UIViewController, SFSafariViewControllerDelegate {

次に、ボタンのTouch Downイベントメソッド内で自分自身をSFSafariViewControllerオブジェクトのdelegateプロパティにセットし、目的のデリゲートメソッドを書けば良い。

    @IBAction func showSafari(_ sender: AnyObject) {
        // 省略
        webView.delegate = self
        // 省略
    }

    // safariViewControllerDidFinishデリゲートメソッド
    func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
        print("DidFinish")
    }

これを実行したのが以下だ。


(2015/10/24)
(2016/10/29 更新) Swift 3.0対応。

新着情報
【iOS Objective-C, Swift Tips】バッジの表示(Swift)
【iOS Objective-C, Swift Tips】画像の向きを指定して保存する(Swift)
【iOS Objective-C, Swift Tips】UIImagePickerControllerの表示を日本語にする(Swift)

Copyright(C) 2004-2016 モバイル開発系(K) All rights reserved.
[Home]