2016-06-15 5 views
1

Я пытаюсь открыть popover, если приложение запущено из органа уведомления после того, как приложение было прервано. Я свяжусь, чтобы сделать это от AppDelegate. Я использую LocalNotifications. Я знаю, как открыть конкретный вид, если я использую кнопки действий, но не знаю, как что-то открыть, если щелкнуть тело уведомления.Открыто, если приложение запускается из органа уведомления после того, как приложение было завершено

Редактировать: Мое решение работает, только если приложение не завершено.

Edit2: Является ли это правильный способ сделать это ?:

Для простоты я пытаюсь открыть viewController в коде, но на самом деле мне нужно предупредительное сообщение, для этого я использую 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 

}

Я пробовал это, чтобы определить, в каком состоянии находится приложение, но я не могу его протестировать, если приложение прекращено и открыто извещения:

if application.applicationState == UIApplicationState.Active { 
    print("App already open") 

} else { 
    print("App opened from Notification") 
} 

Я попытался добавить это в else{ но не открывается конкретный вид:

пусть mainStoryboardIpad: UIStoryboard = UIStoryboard (имя: "Main", сверток: ноль)

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() 

I хотите получить такой же эффект, как Twitter или Instagram, если на него нажимается уведомление, он перенаправляет вас на пост. Но в моем случае я хочу просто popover (модальный).

ответ

1

, если ваше приложение завершается, и вы получите уведомление и вы нажмете на уведомление, то вы получите эту информацию в следующий код, и что вам нужно написать код в didFinishLaunchingWithOptions метода:

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() 

    } 

, если ваше приложение не в фоновом режиме или в активном режиме вы получаете такой способ, когда вы устанавливаете конкретный контроллер rootview для уведомления. и обратно вам нужно изменить свой rootviewcontroller на основе потока приложений, как только вы вернетесь из диспетчера просмотра уведомлений.

После рассмотрения вашего примера код я исправить со следующими изменениями:

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 
     } 

    } 
+0

@So, если я понимаю, что вы исправить мой код должен работать. Но это не работает. Проверьте мое редактирование. Правильно ли это? –

+0

нет необходимости проверять, если приложение application.applicationState == UIApplicationState.Active {в UIApplicationLaunchOptionsRemoteNotificationKey –

+0

Я пробовал без него, и он не работает. Подождите. Нужно ли устанавливать мой начальный viewcotroller в «Main»? поскольку на самом деле это не первоначальный банкомат. –

Смежные вопросы