#watchkit #watchos-3 #wkinterfacecontroller #usernotifications
#watchkit #watchos-3 #wkinterfacecontroller #пользовательские уведомления
Вопрос:
Я разрабатываю WatchOS3
приложение, в котором пользователь получает локальные уведомления с пользовательскими действиями. У пользователя есть 2 пользовательских действия, которые он может вызвать в уведомлении, вариант 1 и вариант 2. После того, как пользователь нажмет на любую из опций, приложение должно запуститься в определенном представлении.
До сих пор действия с уведомлениями обрабатывались правильно с помощью этой функции в ExtenionsDelegate
:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print("Tapped in notification")
let identifier = response.actionIdentifier
print(identifier)
switch(identifier){
case "option1":
print("tapped option1")
case "option2":
print("tapped option2")
default: break
}
completionHandler()
}
И вот код из моего основного InterfaceController
, в котором определены категории уведомлений:
func actioncategories() {
let option1 = UNNotificationAction(identifier: "option1", title: "Test Option 1", options: .foreground) //Button 1
let option2 = UNNotificationAction(identifier: "option2", title: "Test Option 2", options: .foreground) //Button 2
let actioncategory = UNNotificationCategory(identifier: "action_category", actions: [option1, option2], intentIdentifiers: [])
UNUserNotificationCenter.current().setNotificationCategories([actioncategory]) //setting actions amp; categories
}
Теперь, как мне указать моему приложению запускаться в определенном представлении при нажатии на опцию 1 или опцию 2?
Ответ №1:
Я нашел решение:
- Вместо того, чтобы использовать func userNotificationCenter в ExtensionsDelegate, используйте func handleAction(с идентификатором идентификатора: String?, для уведомления: UNNotification) в вашем главном интерфейсном контроллере
- с помощью presentController(с именем: , context: ) вы можете открыть определенное представление
Код (в InterfaceController):
override func handleAction(withIdentifier identifier: String?, for notification: UNNotification) {
print("Tapped in notification")
print(identifier)
switch(identifier){
case "option1"?:
print("tapped option1")
presentController(withName: "Option1_Screen", context: "segue")
case "option2"?:
print("tapped option2")
presentController(withName: "Option2_Screen", context: "segue")
default: break
}
}