32

我目前正在使用 3D Touch 为我的 iOS 9 应用程序实现主屏幕快速操作。我有几个使用来自已定义 UIApplicationShortcutIconType 枚举的现有系统图标的操作。

一个例子:

<dict>
    <key>UIApplicationShortcutItemIconType</key>
    <string>UIApplicationShortcutIconTypeSearch</string>
    <key>UIApplicationShortcutItemTitle</key>
    <string>Search for Parking</string>
    <key>UIApplicationShortcutItemType</key>
    <string>SEARCH</string>
</dict>

但是,对于我想使用自定义图标的操作之一。我尝试用我的图像资产的名称替换 UIApplicationShortcutItemIconType 字符串,但这不起作用。

使用 UIApplicationShortcutIcon.iconWithTemplateImageName() 对动态操作进行操作很容易,但此操作需要是静态的。

4

2 回答 2

43

不要使用 UIApplicationShortcutItemIconType 键,而是将其替换为 UIApplicationShortcutItemIconFile 键,然后提供图像文件或 ImageAsset 的名称。

像这样:

<dict>
    <key>UIApplicationShortcutItemIconFile</key>
    <string>MyCustomImageName</string>
</dict>

其余的键可以保持原样。

于 2015-09-13T20:51:42.300 回答
25

使用 UIApplicationShortcutItemIconFile 作为键,使用图像文件的名称(带或不带文件扩展名)作为字符串。例如:使用名为“lightning.png”的图像,您可以将以下内容添加到 Info.plist...

<key>UIApplicationShortcutItems</key>
<array>
    <dict>
        <key>UIApplicationShortcutItemIconFile</key>
        <string>lightning</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>Search for Parking</string>
        <key>UIApplicationShortcutItemType</key>
        <string>SEARCH</string>
    </dict>
</array>

图像可以存储在您的项目树或 Assets.xcassets 中。如果您将图像存储在 Assets.xcassets 中,如果您将图像集命名为与文件名不同的名称,请使用图像集名称。

您的图像文件需要是 PNG(如果您想要透明)、正方形、单色和 35x35 像素。多色图像基本上得到黑色覆盖。

这是满足上述条件的测试图像:

具有透明背景的闪电.png 35x35px

只需将此图像保存为“lightning.png”,将其拖到您的项目树中,然后在 Info.plist 文件中使用上面的代码。

对于那些不习惯将 Info.plist 作为源代码进行编辑的人,如果您在 Property List 中以本机方式进行操作,则上述内容应如下所示:

信息列表

要将这些快捷方式附加到代码中,您可以在 AppDelegate.swift 中执行此操作。添加以下内容:

func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {

    if shortcutItem.type == "SEARCH" {
        print("Shortcut item tapped: SEARCH")
        // go to SEARCH view controller
    }

}

值得注意的是 UIApplicationShortcutItemType 的约定不是全部大写(例如“SEARCH”),而是使用你的包标识符作为前缀:

com.myapps.shortcut-demo.search
于 2015-10-15T04:01:10.157 回答