LoginSignup
5

More than 5 years have passed since last update.

UIActivityViewControllerでSafariを開くがデフォルトでない件

Last updated at Posted at 2018-10-17

UIActivityViewControllerとは

IMG_3689.jpg

アプリでよくあるこういうやつ
詳しい使い方は
[Swift]UIActivityの使い方まとめ
を見ていただければわかると思います。

ただこの機能、デフォルトで「Safariで開く」がなくすごく不便だった・・
ほとんどのキュレーションアプリでみるからデフォルトかと思ってたらみんな自分で実装してたのか。。

実装自体はすごく簡単

まずUIActivityを継承したActivityを作成

CustomActivity.swift
import UIKit

public class CustomActivity: UIActivity {

    // タイトル
    override public var activityTitle: String? {
        return "title"
    }

  // 画像
    override public var activityImage: UIImage? {
       return UIImage(name: "imageName")
    }

    /*
    // 動作させるかどうか
    // ex.URLを開けるならtrue、開けないならfalse
    */
    override public func canPerform(withActivityItems activityItems: [Any]) -> Bool {
        return true
    }

    // 動く直前にしたい動作
    override public func prepare(withActivityItems activityItems: [Any]) {
    }

    // 選択されたときにしたい処理
    override public func perform() {
        self.activityDidFinish(true)
    }

}

それをぶちこんで遷移するだけ

   let activity = UIActivityViewController(activityItems: [""], applicationActivities: [CustomActivity()])
   present(activity, animated: true, completion: nil)

ライブラリにしてみた

ただSafariで開くはめちゃめちゃ需要高そうだし苦しむ人がいるのでは。。と思いライブラリを作成してみました。

KSSafariActivity

   let activity = UIActivityViewController(activityItems: [""], applicationActivities: [KSSafariActivity(title: "open safari", url: URL(string: "https://hogehoge")!)])
   present(activity, animated: true, completion: nil)

だけで

image.png

ActivityViewControllerにSafariで開くをい追加できます!ぜひ使ってください〜〜ヽ(・∀・)ノ

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
5