2015-05-19 29 views
1

我正在嘗試做一個小使者,我想顯示一條警告消息,指出除了談話本身。現在,我的警報隨處顯示,是否可以過濾它,以便它不顯示在ConversationDetailController上?如何在iOS推送通知後顯示UIAlertView,除了在一個視圖中

這是我在的appdelegate代碼

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 

    var mess:String? 
    var displayName:String? 


    if let result = userInfo["aps"] as? NSDictionary { 

     if let alert = result["alert"] as? String { 

      mess = alert 

      if let extra = userInfo["extra"] as? NSDictionary 
      { 

       if let name = extra["displayName"] as? String 
       { 

        displayName = name 

        var alert = UIAlertView(title: "You have a new message from \(displayName!)", message: mess, delegate: nil, cancelButtonTitle: "OK") 
        alert.show() 

       } 

      } 
      NSNotificationCenter.defaultCenter().postNotificationName("newMessageReceived", object: nil) 

     } 

    } 

} 
+0

你的視圖控制器是如何呈現的?對你的問題最簡單的解決方案是檢查self.window.rootViewController,但如果你使用容器(如UITabBarController或UINavigationController),這將不是你正在尋找的viewController – chedabob

+0

My ConversationDetailTableViewController嵌入在UINavigationController不幸的是:/ –

回答

2

你可以做線沿線的東西:

  1. 創建一個新的類,這是一個警告呈現經理
  2. 創建的這個實例當您收到通知時提供類
  3. 將所有警報邏輯轉移到該類中
  4. 個應用程序委託職位newMessageReceived通知和傳遞呈現管理爲對象
  5. 任何人誰遵守該通知可以詢問表示管理有關通知的詳細信息並取消演示
  6. 如果有人取消,則通知不顯示
  7. 張貼通知應用程序的委託後,詢問演示經理presentAlertIfAppropriate(如果它被取消,檢查)

通知將直接發送到所有的觀察者,所以在這個時間點,你可以張貼通知和立即檢查是否需要介紹。最好讓通知的收件人花點時間來決定取消,但如果你需要這樣做,事情會變得更加複雜......

+0

理論上我理解,但我對iOS非常陌生,在實踐中我努力做到這一點,您能否向我展示一個實現的例子? –

+0

也許一個想法來創建一個新的問題,並顯示代碼,你有多遠?你創建了新班級?給它一個'displayName'的屬性?向'displayAlertIfRequired'添加了一個方法? – Wain