Как указать пользовательский значок для статического объекта UIApplicationShortcutItem в моем приложении iOS 9?
В настоящее время я выполняю быстрые действия для моего приложения iOS 9 с помощью 3D Touch. У меня есть несколько действий с использованием существующих значков системы из определенного перечисления 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(), но это действие должно быть статическим.
Ответы
Ответ 1
Вместо использования ключа UIApplicationShortcutItemIconType замените его ключом UIApplicationShortcutItemIconFile, а затем укажите имя вашего файла изображения или ImageAsset.
Вот так:
<dict>
<key>UIApplicationShortcutItemIconFile</key>
<string>MyCustomImageName</string>
</dict>
Остальные ключи могут оставаться такими, как они были.
Ответ 2
Используйте 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 пикселей. Многоцветные изображения по существу получают черное наложение.
Здесь тестовое изображение, которое соответствует вышеуказанным критериям:
![lightning.png с прозрачным фоном 35x35px]()
Просто сохраните это изображение как "lightning.png", перетащите его в дерево проектов и используйте приведенный выше код в файле Info.plist.
Для тех, кому не удобно редактировать Info.plist в качестве исходного кода, вот как это должно выглядеть, если вы сделаете это изначально в списке свойств:
![Info.plist]()
Чтобы прикрепить эти ярлыки к коду, вы делаете это в 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 не все шапки (например, "ПОИСК" ), а скорее использует ваш идентификатор пакета как предварительное исправление:
com.myapps.shortcut-demo.search