2015-05-19 61 views
2

有人可以通过添加一个按钮到长时间的本地通知来讨论我吗?我对手表套件和通知都很陌生。如何将按钮添加到Apple WatchKit长时间看通知

长外观运行正常。我在我的主机应用程序中设置了一个UILocalNotification,设置alertBody,category,userInfo等并将其发送出去。

在我的通知控制器中,我将所有设置都设置为didReceiveLocalNotification,它工作正常。

从我的研究看来,我应该以某种方式将按钮添加到通知并使用方法handleActionWithIdentifier: forLocalNotification,但我不清楚如何执行此操作。

我正在写Objective-C。由于

回答

0

这里是我使用的通知有效载荷:

{ 
    "aps": { 
     "alert": { 
      "body": "Hi! How you doing? This is a test message. Press 'Reply' button to reply. Thanks!", 
      "title": "Petya" 
     }, 
     "category": "newMessage" 
    }, 

    "WatchKit Simulator Actions": [ 
     { 
      "title": "Reply", 
      "identifier": "replyPressed" 
     } 
    ], 
} 

创建自定义通知子类并覆盖下面的方法,不要忘记设置该子类中相应的情节串连图板控制器:

override func didReceiveRemoteNotification(remoteNotification: [NSObject : AnyObject], withCompletion completionHandler: (WKUserNotificationInterfaceType) -> Void) { 
    if let aps = remoteNotification["aps"] as? NSDictionary { 
     if let alert = aps["alert"] as? NSDictionary { 
     if let title = alert["title"] as? String { 
      titleLabel.setText(title) 
     } 
     if let body = alert["body"] as? String { 
      bodyLabel.setText(body) 
     } 
     } 
    } 
    completionHandler(WKUserNotificationInterfaceType.Custom) 
    } 

之后,在您的通知自定义按钮标题'回复'将出现。当你按下它时,它会启动手表应用程序主界面控制器,并调用handleActionWithIdentifier:localNotification:handleActionWithIdentifier:remoteNotification:,这取决于您收到的通知类型。你必须这样覆盖它:

override func handleActionWithIdentifier(identifier: String?, forRemoteNotification remoteNotification: [NSObject : AnyObject]) { 
    println("identifier: \(identifier)") 
    println("remoteNotification: \(remoteNotification)") 
    if identifier == "replyPressed" { 
     if let aps = remoteNotification["aps"] as? NSDictionary { 
     if let alert = aps["alert"] as? NSDictionary { 
      if let title = alert["title"] as? NSString { 
      let context = Context() 
      context.object = title 
      pushControllerWithName(kTCChatRoomControllerIdentifier, context: context) 
      } 
     } 
     } 
    } 
    } 

P.S. Context是我自己为WKInterfaceController的子类之间传递数据

希望这将帮助你上课!)

+0

谢谢,我试图弄清楚迅捷。当你说“通知有效载荷”是你用JSON加载UILocalNotification,然后检查'didReceiveLocalNotification'方法中的JSON? – MayNotBe

+0

您可以从Xcode-> New File-> Apple Watch-> Notification Simulation File创建临时通知有效载荷文件(基本上是JSON文件)。 –

+0

@MayNotBe询问localNotifications不是remoteNotifications,localNotification不支持Payload文件 – EridB

0

苹果观察编程指南的Notification Essentials部分介绍如何添加动作按钮长期寻找本地的通知通知。

基本上,您需要为要添加到Long-Look界面的每个按钮以及用于本地通知的类别创建一个UIMutableUserNotificationAction。当您注册通知时,在您的iOS应用程序的应用程序委托中完成此操作。该指南中的清单15-1显示了如何执行此操作。然后,在Apple Watch应用程序的故事板中,将通知的类别设置为您刚刚创建的类别。本指南的下一部分“响应按钮的点击”应该有希望告诉您需要知道的一切,以便启动WatchKit应用程序或在iPhone上执行后台任务。