/ / Otwórz popover, jeśli aplikacja zostanie uruchomiona z treści powiadomienia po zakończeniu aplikacji - swift, uiviewcontroller, appdelegate

Otwórz popover, jeśli aplikacja zostanie uruchomiona z ciała powiadomienia po zakończeniu aplikacji - swift, uiviewcontroller, appdelegate

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 № 1

jeś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
}

}