Ich möchte eine spezifische ViewController
von der TabBarController
immer wenn eine lokale Benachrichtigung ausgelöst wird und ihre benutzerdefinierte Aktion ausgeführt wird. Ich habe folgende Zeile von Code verwendet:Präsentieren Sie einen bestimmten ViewController von der TabBarController
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) {
switch response.actionIdentifier {
case "first":
DispatchQueue.main.async(execute: {
self.first()
})
case "second":
DispatchQueue.main.async(execute: {
self.second()
})
default:
break
}
completionHandler()
}
So ist es ein first()
Funktion:
func first() {
let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let tabBarController = storyboard.instantiateViewController(withIdentifier: "Root") as! UITabBarController
let navigationController = storyboard.instantiateViewController(withIdentifier: "First") as! UINavigationController
tabBarController.present(navigationController, animated: true) {
}
self.window = UIWindow.init(frame: UIScreen.main.bounds)
self.window?.tintColor = UIColor(red: 0.0, green: 0.5, blue: 0.0, alpha: 1.0)
self.window?.rootViewController = tabBarController
self.window?.makeKeyAndVisible()
}
Zweite Funktion: second()
func second() {
let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let tabBarController = storyboard.instantiateViewController(withIdentifier: "Root") as! UITabBarController
let navigationController = storyboard.instantiateViewController(withIdentifier: "Second") as! UINavigationController
tabBarController.present(navigationController, animated: true) {
}
self.window = UIWindow.init(frame: UIScreen.main.bounds)
self.window?.tintColor = UIColor(red: 0.0, green: 0.5, blue: 0.0, alpha: 1.0)
self.window?.rootViewController = tabBarController
self.window?.makeKeyAndVisible()
}
Und es funktioniert gut, aber ich kann das nicht öffnen zweite ViewController
während der ersten wird vorgestellt und die zweite Benachrichtigung abgefeuert wird: In der Konsole: Warnung Versuch Viewcontroller zu präsentieren ...
Es scheint zu nutzlos. Es gibt nur 1 – Mannopson
Es muss nichts zurückgeben. Wenn Sie selectedIndex auf eine beliebige Zahl setzen, ändert sich die Registerkarte der Registerkarte in den ausgewählten Index. Wenn Sie selectedIndex = 0 setzen, wechseln Sie zur ersten Registerkarte. selectedIndex = 1, zweite Registerkarte. Und so weiter –
Danke für Ihre Hilfe. Ich habe keine Erfahrung mit der UITabBarController-Klasse. – Mannopson