Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

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以降というのが、、

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

y-okudera
ぼのぼの。 アカウント名をGitHubに合わせました!(旧アカウント名: @okuderap)
andfactory
Smartphone Idea Companyとして、人々の生活に「&(アンド)」を届ける。
https://andfactory.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away