web-dev-qa-db-fra.com

Comment spécifier une icône personnalisée pour un UIApplicationShortcutItem statique dans mon application iOS 9?

J'implémente actuellement des actions rapides sur l'écran d'accueil pour mon application iOS 9 à l'aide de 3D Touch. J'ai plusieurs actions en utilisant les icônes système existantes de l'énumération UIApplicationShortcutIconType définie.

Un exemple:

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

Cependant, pour l'une des actions, je souhaite utiliser une icône personnalisée. J'ai essayé de remplacer la chaîne UIApplicationShortcutItemIconType par le nom de mon élément d'image, mais cela ne fonctionne pas.

C'est assez facile à faire pour les actions dynamiques utilisant UIApplicationShortcutIcon.iconWithTemplateImageName (), mais cette action doit être statique.

28
Chris Allwein

Au lieu d'utiliser la clé UIApplicationShortcutItemIconType, remplacez-la par la clé UIApplicationShortcutItemIconFile, puis indiquez le nom de votre fichier image ou ImageAsset.

Comme ça:

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

Le reste des clés peut rester tel quel.

37
Chris Allwein

Utilisez UIApplicationShortcutItemIconFile comme clé et le nom de votre fichier image (avec ou sans extension de fichier) comme chaîne. Par exemple: en utilisant une image nommée "lightning.png" vous ajouteriez ce qui suit à 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>

L'image peut être stockée dans votre arborescence de projet ou dans Assets.xcassets. Si vous stockez l'image dans Assets.xcassets, utilisez le nom de l'ensemble d'images si vous nommez l'ensemble quelque chose de différent de votre nom de fichier.

Votre fichier image doit être un PNG (si vous voulez de la transparence), un carré, une seule couleur et 35x35 pixels. Les images multicolores reçoivent essentiellement une superposition noire.

Voici une image de test qui répond aux critères ci-dessus:

lightning.png with transparent background 35x35px

Enregistrez simplement cette image sous le nom "lightning.png", faites-la glisser dans l'arborescence de votre projet et utilisez le code ci-dessus dans votre fichier Info.plist.

Pour ceux qui ne sont pas à l'aise de modifier Info.plist en tant que code source, voici à quoi cela devrait ressembler si vous le faites en mode natif dans la liste des propriétés:

Info.plist

Pour attacher ces raccourcis au code, vous le faites dans AppDelegate.Swift. Ajoutez ce qui suit:

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

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

}

Il convient de noter que la convention pour UIApplicationShortcutItemType n'est pas toutes les majuscules (par exemple, "SEARCH"), mais plutôt d'utiliser votre identifiant de bundle comme préfixe:

com.myapps.shortcut-demo.search
24
Justin Vallely