2015-05-19 61 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