官方文檔鏈接
https://developer.apple.com/documentation/uikit/uiapplicationshortcutitem/
官方demo下載鏈接
https://docs-assets.developer.apple.com/published/127f683dd6/AddHomeScreenQuickActions.zip
添加方式有兩種盅安,靜態(tài)添加 和 動態(tài)添加
一、靜態(tài)添加
直接在info.plist文件中添加(不想一個個添加,可以找到info.plist文件窗怒,以源碼方式打開,然后直接復制)
<key>UIApplicationShortcutItems</key>
<array>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>SearchAction</string>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeSearch</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Search</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string>Search for an item</string>
</dict>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>ShareAction</string>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeShare</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Share</string>
<key>UIApplicationShortcutItemSubtitle</key>
<string>Share an item</string>
</dict>
</array>
Key | Description |
---|---|
UIApplicationShortcutItemType (required) | 可以理解為菜單中 item 的標識土涝,添加多個 item 的時候根據(jù)這個標識來區(qū)分點擊事件 |
UIApplicationShortcutItemTitle (required) | 菜單中 item 標題备蚓,最多顯示兩行,顯示不全系統(tǒng)會自動在后面加上 ... |
UIApplicationShortcutItemSubtitle | 菜單中 item 副標題弛说,最多顯示兩行,顯示不全系統(tǒng)會自動在后面加上 ... |
UIApplicationShortcutItemIconType | 系統(tǒng)圖標翰意,枚舉類型木人,關(guān)于所有圖標可以自己嘗試,或在文檔中查看 |
UIApplicationShortcutItemIconFile | 自定義圖片名稱(官方文檔推薦圖標應(yīng)是 35 * 35 的單色冀偶,方形圖片) |
UIApplicationShortcutItemUserInfo | 一個可選的醒第,應(yīng)用程序定義的字典 |
關(guān)于這些字段更詳細的解釋,可查看官方文檔:https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW36
系統(tǒng)圖標官方文檔:
https://developer.apple.com/documentation/uikit/uiapplicationshortcuticon/icontype
二进鸠、動態(tài)添加
- 可以放在任何想要添加的頁面稠曼,一般放在頁面啟動之后
func addShortcutItems() {
// 自定義圖標
let shareIcon = UIApplicationShortcutIcon(templateImageName: "share")
let shareItem = UIApplicationShortcutItem(type: "Share", localizedTitle: "分享", localizedSubtitle: nil, icon: shareIcon, userInfo: nil)
// 系統(tǒng)圖標
let homeIcon = UIApplicationShortcutIcon(type: .home)
let homeItem = UIApplicationShortcutItem(type: "home", localizedTitle: "首頁", localizedSubtitle: nil, icon: homeIcon, userInfo: nil)
// .fill后綴的圖標名是 Apple 為我們提供了免費 SF 符號,可以在應(yīng)用中使用客年,
// 具體可查看官方文檔:https://developer.apple.com/sf-symbols/
let addIcon = UIApplicationShortcutIcon(systemImageName: "square.and.arrow.up.fill")
let addItem = UIApplicationShortcutItem(type: "Add", localizedTitle: "添加", localizedSubtitle: nil, icon: addIcon, userInfo: nil)
UIApplication.shared.shortcutItems = [shareItem, homeItem, addItem]
}
- 點擊代理事件霞幅,在SceneDelegate中進行處理
/// App沒有啟動,點擊菜單item會打開App量瓜,然后走這個代理方法
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
if let shortcutItem = connectionOptions.shortcutItem {
// 加0.1s延遲司恳,然后繼續(xù)之后的操作
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.showAlertAction(shortcutItem.type)
}
}
}
/// App已經(jīng)啟動,會走這個代理方法
func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
showAlertAction(shortcutItem.type)
}
/// 菜單item點擊事件
func showAlertAction(_ type: String) {
var msg: String = ""
if type == "Add" {
msg = "Add"
} else if type == "Share" {
msg = "Share"
} else if type == "Home" {
msg = "Home"
}
let alertVC = UIAlertController(title: "", message: msg, preferredStyle: .alert)
let cancleAction = UIAlertAction(title: "取消", style: .cancel, handler: nil)
alertVC.addAction(cancleAction)
self.window?.rootViewController?.present(alertVC, animated: true, completion: nil)
}
注意點
- 上線之前菜單中默認有兩個绍傲,移除App 和 編輯主屏幕扔傅,上線之后從App Store中下載之后會自動添加一個 分享APP
- 靜態(tài)添加 和 動態(tài)添加 兩種方式可以同時使用, 系統(tǒng)會優(yōu)先加載靜態(tài)添加的items, 然后再加載動態(tài)添加的items.
- 自定義的菜單 items 數(shù)量全部加起來最多只有4個
-
菜單展示優(yōu)先級從高到低順序依次是,靜態(tài)添加 > 動態(tài)添加 > 系統(tǒng)自帶烫饼,優(yōu)先級越高猎塞,越靠近App圖標在設(shè)備主屏幕中的位置,附支付寶截圖