対象:
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)
() Swift 3.0対応。

新着情報
【オープンソースソフトウェア環境構築】Apple silicon Macで開発環境を構築
【Rust Tips】Actix webでJSONをPOSTする
【Rust Tips】コマンドライン引数を取得する

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