检测WatchKit应用程序中的活动接口控制器?

时间:2015-04-29 13:41:24

标签: ios watchkit apple-watch

我已经构建了一个具有分层结构的WatchKit应用程序,可以接收可操作的推送通知。当通知进入时,操作是推送一个特定的接口控制器,以便用户可以立即查看它而无需向下钻取菜单。

Apple handleActionWithIdentifier:ForRemoteNotification: override func handleActionWithIdentifier(identifier: String?, forRemoteNotification remoteNotification: [NSObject : AnyObject]) { if let notificationIdentifier = identifier { if notificationIdentifier == "myActionIdentifier" { pushControllerWithName("myActionController", context: nil) } } } 声明此方法仅在初始接口控制器上调用,因此我在初始接口控制器中处理远程通知的代码如下所示:

handleActionWithIdentifier:forRemoteNotification:

然而,问题是,如果用户之前已经在查看此myActionController,然后暂停了我的应用程序,然后此通知进入并执行操作,则应用程序将再次将此同样的myActionController推送到堆栈。然后,当用户点击“后退”按钮时,他们只会弹出前一个myActionController,它看起来是一样的。此问题也会堆叠 - 如果用户收到此类型的多个通知并对所有这些通知执行操作,myActionController将开始堆叠。

我想通过willActivate:检查当前活动接口控制器是什么来解决这个问题,如果它已经是myActionController,则不要做任何事情(因为它会在LEFT JOIN之后重新加载无论如何都要求它。我知道这有可能(有时)在iOS中,例如在UINavigationController上,但我不知道它是否可以在WatchKit中使用。有没有人有任何想法?

1 个答案:

答案 0 :(得分:3)

我在自己的WatchKit应用程序中几乎完全相同,我通过跟踪当前正在呈现的视图控制器来处理它。在简单版本中,您可以跟踪您已呈现的最后一个视图控制器的名称,并在呈现控制器的willActivate方法中清除它(因为它将在重新显示呈现控制器时调用)。如果您在出示某些内容时收到了通知,则可以先决定是否需要先解除/弹出控制器。

它可能比你想要/需要的更多,但是我已经编写了一个JBInterfaceController子类来包含很多这样的功能:https://github.com/mikeswanson/JBInterfaceController