Перенаправить на другой StoryBoard из уведомления? - PullRequest
0 голосов
/ 27 ноября 2018

По умолчанию из уведомления мы открываем первый ViewController из Mail.Storyboard.Можно ли открыть еще одну раскадровку?Я уже пробовал несколько решений, но у меня не работает.Весь код ниже.Дайте мне знать, пожалуйста, если вам нужно больше информации.Большое спасибо.

import UIKit
import UserNotifications

class Notifications: UIViewController, UNUserNotificationCenterDelegate {

@IBOutlet weak var scheludeMeal: UIButton!
@IBOutlet weak var firstDatePicker: UIDatePicker!
...

var savedFirstNotification: Date? {
get {
return UserDefaults.standard.object(forKey: "firstMealTime") as? Date
}
set {
UserDefaults.standard.set(newValue, forKey: "firstMealTime")
}
}
...
}

override func viewDidLoad() {
super.viewDidLoad()

turnOnNotification.isHidden = true

if let savedFirstNotification = savedFirstNotification {
firstDatePicker.date = savedFirstNotification
}       
...              
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Yes!")
} else {
print("No...?")
}
}

}
...

@IBAction func scheludeButton(_ sender: Any) {

let center = UNUserNotificationCenter.current()

center.removeAllPendingNotificationRequests()

let content = UNMutableNotificationContent()
content.title = "Ttile"
content.body = "Description of notification :)"
content.sound = UNNotificationSound.default

let firstMealComponent = firstDatePicker.calendar.dateComponents([.hour, .minute], from: firstDatePicker.date)
let trigger = UNCalendarNotificationTrigger(dateMatching: firstMealComponent, repeats: true)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)

savedFirstNotification = firstDatePicker.date         
...
}         
}

enter image description here

1 Ответ

0 голосов
/ 27 ноября 2018

Это грубая версия решения, которое вы ищете, конечно, вы можете добавить больше проверок, например, в зависимости от полезной нагрузки уведомлений (userInfo) вы можете перейти на разные контроллеры.

extension AppDelegate: UNUserNotificationCenterDelegate {
    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

        completionHandler([.alert, .badge, .sound])
    }

    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

            let storyboard = UIStoryboard(name: "yourStoryboardName", bundle: nil)
            let initialViewController = storyboard.instantiateViewController(withIdentifier: "yourControllerName")

            self.window?.rootViewController = initialViewController
            self.window?.makeKeyAndVisible()
    }

    @available(iOS 9, *)
    func application(_ application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [AnyHashable : Any], withResponseInfo responseInfo: [AnyHashable : Any], completionHandler: @escaping () -> Void) {

            let storyboard = UIStoryboard(name: "yourStoryboardName", bundle: nil)
            let initialViewController = storyboard.instantiateViewController(withIdentifier: "yourControllerName")

            self.window?.rootViewController = initialViewController
            self.window?.makeKeyAndVisible()

            completionHandler()
    }
}
...