LoginSignup
12
21

More than 5 years have passed since last update.

SFSafariViewControllerをとりあえず使ってみた

Posted at

はじめに

SwiftでSFSafariViewControllerを使ってみました。

名前は知っていたのですが、使ったことなかったので使ってみました。
今回やってみたのは、とりあえずウェブブラウザを表示させることです。

SFSafariViewControllerとは??

iOS9.0以降対応で、webを閲覧するための標準インタフェースを提供してくれるクラス。
Safariのいくつかの機能を備えているらしいです。(まだ勉強中なので、らしいとしました。)

とりあえず、使おう

ウェブブラウザを表示させるだけなら、とても簡単に出来ます。

import SafariServices
SafariServicesをimportして、

ViewController.swift
@IBAction func tappedSafariButton(sender: AnyObject) {
    let qiitaUrl = NSURL(string: "https://qiita.com")

    if let qiitaUrl = qiitaUrl {
        let safariViewController = SFSafariViewController(URL: qiitaUrl)
        presentViewController(safariViewController, animated: false, completion: nil)
    }
}

これだけ!
これだけでボタンを押したらSFSafariViewControllerでウェブブラウザを表示できます。
(Buttonの生成は省略しています。)

Simulator Screen Shot 2016.08.29 22.51.09.png

Simulator Screen Shot 2016.08.29 22.39.33.png

簡単ですね!

delegateも!

SFSafariViewControllerDelegateなんていうのがあるのでこちらも触ってみました。

// SFSafariViewControllerDelegate
/*(1)*/ optional public func safariViewController(controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool)
/*(2)*/ optional public func safariViewController(controller: SFSafariViewController, activityItemsForURL URL: NSURL, title: String?) -> [UIActivity]
/*(3)*/ optional public func safariViewControllerDidFinish(controller: SFSafariViewController)

3つしかなかったので、とりあえず並べてみました。

(1)は、最初に表示する画面の読み込み完了時に呼ばれます。

(2)は、アクションボタンタップ時に呼ばれます。
カスタムUIActivityを追加してあげたりできます。

アクションボタンはこいつです。
スクリーンショット 2016-08-29 23.19.45.png

(3)は、Doneボタンタップ時に呼ばれます。

とりあえず、ログを吐かせるぐらいしかしていませんが最終的にはこんな感じ。

ViewController.swift
import UIKit
import SafariServices

class ViewController: UIViewController {
// MARK: IBActions
    @IBAction func tappedSafariButton(sender: AnyObject) {
        let qiitaUrl = NSURL(string: "https://qiita.com")

        if let qiitaUrl = qiitaUrl {
            let safariViewController = SFSafariViewController(URL: qiitaUrl)
            safariViewController.delegate = self
            presentViewController(safariViewController, animated: false, completion: nil)
        }
    }
}

// MARK: SFSafariViewControllerDelegate
extension ViewController: SFSafariViewControllerDelegate {

    func safariViewController(controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) {
        print("didCompleteInitialLoad")
    }

    func safariViewController(controller: SFSafariViewController, activityItemsForURL URL: NSURL, title: String?) -> [UIActivity] {
        print("activityItemsForURL")
        return [SampleActivity()] // SampleActivityはUIActivityを継承したカスタムUIActivity
    }

    func safariViewControllerDidFinish(controller: SFSafariViewController) {
        print("safariViewControllerDidFinish")
    }
}

さいごに

SFSafariViewControllerはシンプルで使いやすかった!
ただ、対応しているのがiOS9.0以降というのが、、

今回は、ウェブブラウザ表示しかできていないので
何ができて何ができないのかもう少し勉強してみます。

12
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
21