🧬
[Swift]Home Screen Quick Actions 超速サンプル
Quick Actions の超速サンプルコードです。
サンプルプロジェクトはこちら。
設定
設定したいタイミングで下記を設定します。
- 画像、タイトル、サブタイトル
- タップ時に取得したい値(userInfo)
ViewControllerとか
// UIApplicationShortcutItem として保存する
var shortcutItems: [UIApplicationShortcutItem] = []
let bundleId = Bundle.main.bundleIdentifier ?? ""
let title = "タイトル"
let subTitle = "サブタイトル"
let icon = UIApplicationShortcutIcon(systemImageName: "clock") // システムアイコン
let icon = UIApplicationShortcutIcon(templateImageName: "quickactionsIconConfig") // Assetsに定義した任意画像
var userInfo: [String : String] = [:]
userInfo["キー1"] = "値1"
userInfo["キー2"] = "値2"
let shortcut = UIMutableApplicationShortcutItem(type: bundleId,
localizedTitle: title,
localizedSubtitle: subTitle,
icon: icon,
userInfo: userInfo as [String : NSSecureCoding])
shortcutItems.append(shortcut)
UIApplication.shared.shortcutItems = shortcutItems
タップ時の受け取り
タップ時にSceneDelegateのdelegateメソッドが呼ばれます。
アプリがバックグラウンドにあるか、タスクキルされているかで呼ばれるメソッドが変わります。
アプリがバックグラウンドにある場合
SceneDelegate.swift
func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void){
// バックグラウンド時にQuick Actionsで起動された場合はここに来る
guard let itemUserInfo = shortcutItem.userInfo else {
return
}
// userInfoからセットした値を取得できる
let value1 = itemUserInfo["キー1"] as! String
let value2 = itemUserInfo["キー2"] as! String
print("value1=\(value1)")
print("value2=\(value2)")
}
アプリがタスクキルされている場合
SceneDelegate.swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
if let shortcutItem: UIApplicationShortcutItem = connectionOptions.shortcutItem {
// タスクキル時にQuick Actionsで起動された場合はここに来る
guard let itemUserInfo = shortcutItem.userInfo else {
return
}
// userInfoからセットした値を取得できる
let value1 = itemUserInfo["キー1"] as! String
let value2 = itemUserInfo["キー2"] as! String
print("value1=\(value1)")
print("value2=\(value2)")
}
}
表示例
アイコン長押しで表示します。
Discussion