Próbuję otworzyć popover, jeśli aplikacja została uruchomiona z ciała powiadomienia po zakończeniu aplikacji. Mam zamiar to zrobić AppDelegate
. ja używam LocalNotifications
. Wiem, jak otworzyć określony widok, jeśli używam przycisków akcji, ale nie wiem, jak otworzyć coś, jeśli kliknięto treść powiadomienia.
Edytować: Moje rozwiązanie działa tylko wtedy, gdy aplikacja nie zostanie zakończona.
Edycja2: Czy to właściwy sposób na zrobienie tego ?:
Dla uproszczenia próbuję otworzyć viewController
w kodzie, ale w rzeczywistości potrzebuję wiadomości alarmowej, z której korzystam JSSAlertView
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
if let TappedNotification = launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] as? NSDictionary {
print("The notification is (TappedNotification)")
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewControllerWithIdentifier("Main") as UIViewController
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = initialViewControlleripad
self.window?.makeKeyAndVisible()
}
}
return true
}
Próbowałem to wykryć, w jakiej aplikacji stanu jest, ale nie mogę go przetestować, jeśli aplikacja zostanie zakończona i otwarta z powiadomienia:
if application.applicationState == UIApplicationState.Active {
print("App already open")
} else {
print("App opened from Notification")
}
Próbowałem to dodać else{
ale nie otwiera określonego widoku:
let mainStoryboardIpad: UIStoryboard = UIStoryboard (name: "Main", bundle: nil)
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewControllerWithIdentifier("Main") as UIViewController
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = initialViewControlleripad
self.window?.makeKeyAndVisible()
Chcę, aby taki sam efekt, jak Twitter czy Instagram, jeśli kliknie się na treść powiadomienia, przekieruje Cię do posta. Ale w moim przypadku chcę tylko popover (modalne).
Odpowiedzi:
1 dla odpowiedzi № 1jeśli Twoja aplikacja zostanie zakończona, a otrzymasz powiadomienie i dotkniesz powiadomienia, otrzymasz te informacje, podążając za kodem i musisz wpisać kod w didFinishLaunchingWithOptions
metoda:
if let TappedNotification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary {
print("The notification is (TappedNotification)")
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewControllerWithIdentifier("Main") as UIViewController
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = initialViewControlleripad
self.window?.makeKeyAndVisible()
}
jeśli Twoja aplikacja nie działa w tle lub jest aktywnatryb uzyskuje się w ten sposób, ustawiając określony kontroler głównego kontrolera dla powiadomienia. iz powrotem trzeba zmienić kontroler rootview na podstawie przepływu aplikacji po powrocie z widoku View Controller.
Po sprawdzeniu kodu próbkowego poprawię go, wprowadzając następujące zmiany:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let tintColor = UIColor(red: 252/255, green: 72/255, blue: 49/255, alpha: 1)
window!.tintColor = tintColor
application.registerForRemoteNotifications()
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert , categories: nil))
let notification = launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] as! UILocalNotification!
if (notification != nil) {
print("The notification is (notification)")
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewControllerWithIdentifier("Main") as! NotificationViewController
self.window?.rootViewController = initialViewControlleripad
self.window?.makeKeyAndVisible()
let alert = UIAlertController(title: "Alert", message: "YES NOTIFICITO", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil))
window!.rootViewController?.presentViewController(alert, animated: true, completion: nil)
return true
}else{
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewControllerWithIdentifier("first") as UIViewController
self.window?.rootViewController = initialViewControlleripad
self.window?.makeKeyAndVisible()
let alert = UIAlertController(title: "Alert", message: "NO NOTIFICIATION", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil))
window!.rootViewController?.presentViewController(alert, animated: true, completion: nil)
return true
}
}